我只想在文本的一部分中替换空格。
我的输入文本如下,
---start of text---test1 test2 test3 test4---end is here---
我想要的输出是
---start of text---
test1
test2
test3
test4
---end is here---
我尝试了以下命令,
sed 's/start of text/start~of~text/; s/end is here/end~is~here/; s/text---/text--- /; s/---end/ ---end/' test_file | tr ' ' '\n' | sed 's/~/ /g'
这有效,但是为此我必须对文本行的开始和结束进行硬编码。有什么办法可以避免这种情况,我尝试在awk中使用gsub,但这没用。
答案 0 :(得分:1)
使用GNU sed,您可以在开始文本之后和结束文本之前添加换行符,然后在文本之间用t
命令循环以换行符替换空格:
sed -E "s/(---start of text---)(.*)(---end is here---)/\1\n\2\n\3/;:a;s/(\n[^ ]*) (.*\n)/\1\n\2/;ta;" file
说明:
s/(---start of text---)(.*)(---end is here---)/\1\n\2\n\3/
:使用反向引用,在---start of text---
之后添加一个换行符,在---end is here---
之前添加一个换行符:a;s/(\n[^ ]*) (.*\n)/\1\n\2/
:用换行符替换\n
之后找到的第一个空格,后跟非空格字符(\n[^ ]*
)ta
:处理剩余空间的循环。 t
是sed测试命令,当前一个替换命令成功执行时,该命令将循环到a
标签答案 1 :(得分:0)
请尝试以下操作(考虑到您的Input_file与所示示例相同)。
this.googleInput._root._lastNativeText
OR
awk 'BEGIN{FS=OFS="---"} {gsub(" ",ORS,$3);print OFS $2 OFS ORS $3 ORS OFS $(NF-1) OFS}' Input_file
输出如下。
awk 'BEGIN{FS=OFS="---"} {gsub(" ",ORS,$3);print OFS $2,ORS $3 ORS,$(NF-1) OFS}' Input_file