当我使用 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]
我只是不知道为什么']关键字'出现。
答案 0 :(得分:4)
发生这种情况是因为您的文件由于在Windows计算机上创建而具有回车符。使用dos2unix
或tr -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]