从文件获取脚本时,sed的行为有所不同

时间:2019-04-15 17:45:50

标签: sed matching

我需要从文件中提取可能包含\n序列的字符串。
请注意,在这种情况下,\n不是换行符,而是两个字符的序列:反斜杠后跟小写的n
例如,如果我输入:

echo garbage "useful \n string" garbage | sed -e s/.*\(\"[^\"]*\"\).*/\1/

结果正确:

"useful \n string"  

如果相反,我将sed命令保存到文件(b.txt)并键入:

 echo garbage "useful \n string" garbage | sed -f b.txt

应该做同样的事情,相反,我看不到任何匹配,结果是:

garbage "useful \n string" garbage  

请注意,该文件仅包含sed命令;输入的字符串仍然来自标准输入。

我正在Windows 10命令行窗口中使用GNU sed版本4.2.1。
有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您的引号和转义序列看起来可疑,请尝试以下操作:

$ echo 'garbage "useful \n string" garbage' | sed 's/.*\("[^"]*"\).*/\1/'
"useful \n string"
$ cat b.txt
s/.*\("[^"]*"\).*/\1/
$ echo 'garbage "useful \n string" garbage' | sed -f b.txt
"useful \n string"

答案 1 :(得分:0)

正确使用''""对,并使用-E代替-e选项,

$ echo 'garbage "useful \n string" garbage' | sed -E 's/.*("[^"]*").*/\1/'
"useful \n string"

$ cat b.txt
s/.*("[^"]*").*/\1/

$ echo 'garbage "useful \n string" garbage' | sed -Ef b.txt
"useful \n string"