从文本文件中提取一行中的第二个单词
Posted
技术标签:
【中文标题】从文本文件中提取一行中的第二个单词【英文标题】:Extract The Second Word In A Line From A Text File 【发布时间】:2014-10-18 22:53:48 【问题描述】:我目前需要在文本文件的一行中提取第二个单词 (CRISTOBAL)。
* CRISTOBAL AL042014 08/05/14 12 UTC *
“CRISTOBAL”行中的第二个单词每天都会有所不同,所以我只需要找到一种方法来提取该行中的第二个单词/字符。
【问题讨论】:
你需要哪个 - 单词或字符? 【参考方案1】:第二个字
echo '* CRISTOBAL AL042014 08/05/14 12 UTC *' | awk 'print $2'
会给你CRISTOBAL
echo 'testing only' | awk 'print $2'
会给你only
如果行的结构发生变化,您可能需要修改它。
文本文件中各行的第二个单词
如果你的文本文件包含以下两句
this is a test
* CRISTOBAL AL042014 08/05/14 12 UTC *
运行 awk 'print $2' filename.txt
将返回
is
CRISTOBAL
第二个字符
echo 'testing only' | cut -c 2
这将为您提供e
,这是第二个字符,您可能还需要修改它以满足您的需要。
【讨论】:
【参考方案2】:在需要 sed 的情况下/仅可用
sed '^ *[^ ]* *\([^ ]*\) .*/\1/' YourFile
取第二个非空白组(假设单词后至少有 1 个空格
但我更喜欢 cut 以提高速度(如果需要任何操作,我更喜欢 awk)。
实际上它主要取决于脚本中的下一个动作(如果有的话)。
【讨论】:
【参考方案3】:我知道它已经过时了,但是 @NeronLeVelu 的头发短了我在管道中需要的东西。
ip link show wlan0 | grep 'link'| sed 's/^ *[^ ]* *\([^ ]*\) .*/\1/'
是我用来提取 MAC 地址的。由于其他原因,我无法使用 awk。
【讨论】:
我很高兴你能实现你想要的,但这并不能以任何方式回答 OP 的问题。考虑在@NeronLeVelu 的回答下发表评论【参考方案4】:您可以使用 shell 内置命令:
#!/bin/sh
set -f && set +f -- * CRISTOBAL AL042014 08/05/14 12 UTC *
echo $2
或使用别名更好地阅读:
#!/bin/sh
alias explode='set -f;set +f --'
LINE='* CRISTOBAL AL042014 08/05/14 12 UTC *'
explode $LINE
echo $2
“-f”表示: 禁用文件名生成(通配符), 所以星号不会扩展为文件名。 一次关闭和打开它会再次设置默认值。 这适用于所有 POSIX shell。
【讨论】:
以上是关于从文本文件中提取一行中的第二个单词的主要内容,如果未能解决你的问题,请参考以下文章