使用sed从文件中提取单词

extract word from file using sed

我在使用 sed 从文件中提取关键字时遇到问题。
文件中的内容如下:

======================= keyword begin =======================
blablabla
======================== keyword end ========================

然后我做:

$ sed -n 's/=* \(.*\) begin =*//p' test
keyword   ## It is ok
$ a=`sed -n 's/=* \(.*\) begin =*//p' test`
$ echo "[$a]"
]keyword  ## Why the output is like this? I think it should be [keyword]

我只是不知道为什么会出现“]关键字”。

发生这种情况是因为您的文件有回车符 returns,因为它是在 Windows 机器上创建的。使用 dos2unixtr -d '\r'.

从文件中删除它们

你可以看出,因为 \r 导致终端从头开始覆盖同一行。如果你写 [keyword,然后从行的开头用 ] 覆盖,你最终会得到 ]keyword

有关详细信息,请参阅 bash tag wiki

使用 echo $a 而不是 echo "[$a]",它将只打印关键字

如果你使用 echo "[$a]" 它将打印 [keyword]

只需将您的 sed 命令更改为:

a=$(sed -n 's/=* \(.*\) begin =*.*$//p' file)
echo "[$a]"
[keyword]

这个sed将匹配begin之后的所有==结束后的所有剩余字符(包括\r)。