从文本文件中提取一行中的第二个单词

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。

【讨论】:

以上是关于从文本文件中提取一行中的第二个单词的主要内容,如果未能解决你的问题,请参考以下文章

根据第二个文件中相应的ID列表从文件中提取第一个条目?

如何为css中的文本设置特定的像素或字符宽度限制

如何从另一个文件中的一个文件中查找单词?

从 x 到 y 秒播放音频

根据数组中的重复模式更改 SwiftUI 列表中文本字段的第二次出现

从Powershell中的文本文件中输入值