例子:
"A a A a ( A a ) A ( a A ) a"
例如,我如何仅在(和)之间替换所有As与Ts以获得:
"A a A a ( T a ) A ( a T ) a"
并给出下一个示例输入:
"F f F f ( F f ) F ( f F ) f"
例如,我如何用X替换所有Fs,而不用(和)替换所有Fs
获得:
“X f X f ( F f ) X ( f F ) f”
我搜索了谷歌,但没有找到任何可用我想这是关于sed的一般性问题.我希望这个问题可以简化为一般的sed“模板”.
>让FROM和TO只在它们之间运行(在给定行的所有事件中)
>让FROM和TO在他们之间的任何地方运作……
> FROM和TO相同的特殊情况(在“和”或“FOO”和“FOO”之间等)
对于1.和2.
它应该适用于任何 *** 作,不仅仅是替换,还可以用于打印等,比如在字符串中的字符串“FOO”和“bar”之间打印所有内容.
"1 2 3 bar a b c FOO d e f bar g a h FOO i j k bar l m n FOO o p q"
结果将是
" d e f i j k "
因此,非常感谢如何做到这一点的一般例子.似乎这个问题很常见,但谷歌还没有找到好的方法.我也猜这个
回答是非常具有挑战性的.请不要给出任何关于如何做的提示
使用Perl,AWK或除sed之外的任何其他东西.这个问题实际上只是一个sed问题.
插入换行符以分隔段然后使用换行符,行开头(^),行结束($)和分隔符(本例中为圆括号)作为锚点和循环.最后删除添加的换行符.
$echo "A a A a ( A a ) A ( a A ) a" | sed 's/([^)]*)/\n&/g; :a; s/\(\n([^)]*\)A\([^)]*)\)/T/; ta; s/\n//g'A a A a ( T a ) A ( a T ) a$echo "F f F f ( F f ) F ( f F ) f" | sed 's/(/\n(/g; s/)/)\n/g; :a; s/\([^(]*\)F\([^)]*\(\n\|$\)\)/X/g; ta; s/\n//g'X f X f ( F f ) X ( f F ) f$echo "1 2 3 bar a b c FOO d e f bar g a h FOO i j k bar l m n FOO o p q" | sed 's/^/bar/; s/$/FOO/; s/FOO/&\n/g; s/bar/\n&/g; s/bar[^\n]*\n//g; s/[^\n]*FOO\n//g; s/\n//g' d e f i j k总结
以上是内存溢出为你收集整理的sed – 如何仅在部分线路上运行全部内容,希望文章能够帮你解决sed – 如何仅在部分线路上运行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)