使用sed从文件中提取单词

时间:2015-01-20 07:41:38

标签: regex linux bash sed

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

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

然后我这样做:

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

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

3 个答案:

答案 0 :(得分:4)

发生这种情况是因为您的文件由于在Windows计算机上创建而具有回车符。使用dos2unixtr -d '\r'

将其从文件中删除

您可以判断,因为\r会导致终端从头开始覆盖同一行。如果您编写[keyword,然后从行开头覆盖],则最终会得到]keyword

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

答案 1 :(得分:1)

只需将sed命令更改为:

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

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

答案 2 :(得分:0)

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

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