我输入了
"ABC""XYZ""WER"
我想输出
ABC,XYZ,WER
我做了什么
tr -d '"'
这将删除所有字符",我想替换""用,并删除单个"。 输入是grep命令的输出,我将管道添加到grep的输出。
grep something. | sed -e 's/""//g'
它给了我错误sed:没有输入文件
如果写someThing就像
sed -i 's/""/g' file.txt
我得到了第6条:没有终结的`s'命令
答案 0 :(得分:3)
您可以使用以下sed
命令来执行此操作,
sed 's/""/,/g;s/"//g' <<<'"ABC""XYZ""WER"'
sed
的两个步骤:
""
替换为流中的,
"
答案 1 :(得分:3)
使用awk
:
awk '{gsub(/""/,",");gsub(/"/,"")}1' file
gsub
用于正则表达式搜索和替换。第一个用""
替换,
,第二个用替换行的开头和结尾的"
。 1
会awk
打印该行。
使用gawk
:
gawk 'BEGIN{FPAT="[^\"]+";OFS=","}{$1=$1}1' file
该命令是gawk
特定的,因为我使用FPAT
特殊变量。它描述了输入中字段的外观。输入中的字段是一系列非双引号字符。
OFS
是我们想要设置为,
的输出字段分隔符。
$1=$1
只是一种身份转换,但它使awk
使用新的输出分隔符,
重新渲染该行。
1
总是正确的,让awk最终打印出来。
答案 2 :(得分:2)
如果您grep
支持-o
选项
-o, - 仅匹配
仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出上 线。
$ echo '"ABC""XYZ""WER"' | grep -o '[^"]*'
ABC
XYZ
WER
$ echo '"ABC""XYZ""WER"' | grep -o '[^"]*' | paste -sd,
ABC,XYZ,WER
或perl
$ echo '"ABC""XYZ""WER"' | perl -lne 'print join ",", /[^"]+/g'
ABC,XYZ,WER
答案 3 :(得分:1)
使用GNU awk :
awk -v FPAT='"[^"]+"' '{ for(i=1;i<=NF;i++)
printf "%s%s",substr($i,2,length($i)-2),(i==NF? ORS:",") }' <<<'"ABC""XYZ""WER"'
输出:
ABC,XYZ,WER
答案 4 :(得分:0)
使用便携式awk,你可以像这样替换字段分隔符:
awk '$1=$1' FS='""' OFS=,
哪个会将""
替换为,
。 $1=$1
位强制awk执行字段和记录拆分。
所以要回答你的问题,你可以这样做:
<<<'"ABC""XYZ""WER"'\
awk '$1=$1' FS='""' OFS=, | tr -d \"
输出:
ABC,XYZ,WER
答案 5 :(得分:0)
切割
echo '"ABC""XYZ""WER"' | cut -d '"' -f 2,4,6 --output-delimiter=','
答案 6 :(得分:0)
这可能适合你(GNU sed):
WHERE type_desc LIKE '%CONSTRAINT'
这将替换用双引号括起来的字符串(包括可能被双引号引用的字符),并用字符串替换它们,后面跟一个逗号。然后删除最后一个逗号。