替换文本中的空格

时间:2019-02-05 05:46:43

标签: unix awk sed

我只想在文本的一部分中替换空格。

我的输入文本如下,

---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,但这没用。

2 个答案:

答案 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