使用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 机器上创建的。使用 dos2unix
或 tr -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
)。
我在使用 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 机器上创建的。使用 dos2unix
或 tr -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
)。