我需要从文件中提取可能包含\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。
有什么建议吗?
答案 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"