美好的一天,
我想知道如何用*
进行替换。
输入:
"Table: 1.1.3 Nivel de Formacion: *
Seleccione el maximo nivel de formacion que usted ha alcanzado hasta el momento * Departamento - ."
我想要的输出:
"Table: 1.1.3 Nivel de Formacion: Seleccione el maximo nivel de formacion que usted ha alcanzado hasta el momento * Departamento - ."
替换:
sed 's/ \*\n/ /g'
或
awk '{ sub(/ \*\n/, ""); print }'
没有任何效果,为什么?
答案 0 :(得分:2)
将GNU awk用于多字符RS:
$ awk -v RS=' \\*\n' -v ORS= '1' file
"Table: 1.1.3 Nivel de Formacion: Seleccione el maximo nivel de formacion que usted ha alcanzado hasta el momento Departamento - ."
你正在尝试的东西不起作用,因为sed总是一次读取1行而awk默认读取1行,所以在这两种情况下,每行末尾的终止\n
是在您尝试将其替换为RE之前,该工具已经使用了该文件。
答案 1 :(得分:1)
您可以使用Perl:
perl -pe 's/\*\n//g'
答案 2 :(得分:1)
<强> SED 强>:
sed -r '{s/ \*$/ /; T; N; s/\n// }' file
<强> AWK 强>:
awk '
/ \*$/ { sub(/\*$/,""); printf("%s", $0); next }
1
' file
答案 3 :(得分:1)
使用sed
:
sed '/\*$/{N;s/\*\n//;}' file
由于*
是元字符,我们需要将其转义为允许sed
了解它需要被视为文字字符。
我们为sed
设置条件以查找以*
结尾的行,如果我们找到这样的行,我们执行一个块状态,将下一行附加到模式空间,然后替换*\n
什么都没有。