unix 如何在SED中替换(空格+换行符)

vs91vp4v  于 10个月前  发布在  Unix
关注(0)|答案(3)|浏览(165)

如何使用sed删除空格和新行

jono|(space)
(new line)
Jakarta|smp
jojon|jakarta|smp
jojo|bandung|sma
riki|(space)
(new line)
Jakarta|smk

字符串
我尝试这个= sed -i 's/[|\s^[[:space:]]*$]/|/g' tes.txt
这= sed -i 's/|\s\n/|/g' tes.txt
什么都没有改变
我想换这个

jono|Jakarta|smp
jojon|jakarta|smp
jojo|bandung|sma
riki|Jakarta|smk

u0sqgete

u0sqgete1#

您可以匹配|,然后在字符串的末尾加上1个或多个空格。如果有匹配项,将下一行放入模式空间,然后将|后面的可选空格和换行符替换为|
要替换所有出现的分支,您可以使用一个标签,例如:a,然后使用ta来测试分支。如果替换成功,则跳回到标签。

sed -E  '/\|[[:space:]]+$/{:a;N;s/\|[[:space:]]*\n/|/;ta}' tes.txt

字符串
产出

jono|Jakarta|smp
jojon|jakarta|smp
jojo|bandung|sma
riki|Jakarta|smk


Sed演示

42fyovps

42fyovps2#

实现@Cyrus的评论
第一个月

ss2ws0br

ss2ws0br3#

根据我们所掌握的少量信息并从给定的格式进行推断,最安全的方法是:

$ sed 's/|/\n/g' file | sed '/^\s*$/d' | paste -sd '||\n'

字符串
这只是一个简单的转换,没有太多的模糊:

  • 将所有字段分隔符转换为新行
  • 删除所有只包含空格字符的行
  • 将所有内容转换为3列

相关问题