要处理的文字:
""text""
"text"
""
所需的输出:
"text"
"text"
""
试过:
echo -e '""text""\n"text"\n""' | sed -e 's/"".*""/".*"/g'
但显然没有运气。
干杯,
答案 0 :(得分:2)
根据您的示例输入,您可以使用:
sed '/^""$/! s/""/"/g' file
在不仅包含两个双引号的行上,全局用一个双引号替换所有双引号对。
答案 1 :(得分:1)
$ sed 's/"\("[^"]*"\)"/\1/' file
"text"
"text"
""
答案 2 :(得分:0)
您希望在sed命令中使用反向引用(引用先前匹配的部分):
echo -e '""text""\n"text"\n""' | sed -E -e 's/""(.*)""/"\1"/g'
以下是我所做的修改:
(...)
\1
-E
xtended regex所以我不必逃避分组括号答案 3 :(得分:0)
请问您可以尝试按照awk命令告诉我这是否对您有帮助。
awk -v s1="\"" '!/^\"\"$/{gsub(/\"\"/,s1)} 1' Input_file
答案 4 :(得分:0)
另一种方法
cat file | sed 's/"//g' | sed 's/^/"/g' | sed 's/$/"/g'
<强>详情
sed 's/"//g'
删除所有双引号
sed 's/^/"/g'
在每行的开头加上双引号
sed 's/$/"/g'
在每行末尾加上双引号
注意强>
只有每行有一个单词时,此方法才有效,如您的示例所示。
答案 5 :(得分:-1)
Aaron的答案也很好,但反向引用一般来说更贵。为什么不使用更简单的命令:
echo -e '""text""\n"text"\n""' | sed 's/""*/"/g'
正则表达式将多个双引号替换为单引号。
答案 6 :(得分:-1)
echo -e '""text""\n"text"\n""' |awk '/""text""/{gsub(/""/,"\42")}1'
"text"
"text"
""