[英]Sed - Replacing text string containing parentheses, commas and unspecified number of whitespaces
假设一个字母数字文本字符串包含一个包含关键字、括号和逗号的部分,以及紧跟在部分或全部逗号之后的换行符和未指定数量的空格。 如何用bash
中的简单逗号替换文本字符串中的这样一个部分(最好使用sed
)?
例子:
$ cat have.txt
foo (keyword(00001..00002),keyword(00003..00004),
keyword(00005..00006),keyword(00007..00008)) foo
$ cat want.txt
foo (keyword(00001..00002,00003..00004,00005..00006,00007..00008)) foo
试图:
$ sed 's/),keyword(/,/g' have.txt
foo (keyword(00001..00002,00003..00004),
keyword(00005..00006,00007..00008)) foo
(而且,是的,我知道可以通过[[:space:]]
捕获空格。)
使用 GNU sed:
sed -z 's/),\s*keyword(/,/g' file
使用-z
,您将能够匹配换行符, \s*
将匹配零个或多个空格,包括这些换行符。
实际修改文件使用
sed -z -i 's/),\s*keyword(/,/g' file
cat >> edrep.txt << EOF
2s/ //
%s/(//g
%s/)//g
%s/keyword//g
1s/00001/\(keyword\(00001/
2s/8/8))/
1,2j
wq
EOF
ed -s file.txt < edrep.txt
我知道这个问题已经得到解答,但我还是想发布这个解决方案。 这里的人可能会认为它很骇人听闻; 但关键是你可以像猴子一样用 ed 爬上文本文件,而且我不知道有任何其他程序可以让你达到同样的程度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.