我试图替换一个以〜终止的CSV中的字符串,它就像一个密码,我想逃脱分隔符停止。
我用:
ORIGINAL ARGUMENTS:
semicolon;lost "some spaces " "semicolon;kept", no,comma "a,comma"
PARSED ARGUMENTS (EACH ENCLOSED IN ""):
"semicolon"
"lost"
"some spaces "
"semicolon;kept"
"no"
"comma"
"a,comma"
它很好但sed -i "s/\(z.*\~\)/\"\1\"/g"
没有被转义,正则表达式进入最后一行。
是否有某种方式停止"匹配使用~
这些是我的例子。第二部分是正确的,因为我想双引用子表达式:
~
我想拥有(或停止)
zTG*?KM)ии*v=?~~~~~
zTG*?KMии$FhB?~S~~~~
但是在顶部有de word命令我有:
"zTG*?KM)ии*v=?"~~~~~
"zTG*?KMии$FhB?"~S~~~~
答案 0 :(得分:4)
$ cat ip.csv
zTG*?KM)ии*v=?~~~~~
zTG*?KMии$FhB?~S~~~~
$ sed -i 's/z[^~]*/"&"/g' ip.csv
$ cat ip.csv
"zTG*?KM)ии*v=?"~~~~~
"zTG*?KMии$FhB?"~S~~~~
z[^~]*
字符z
后跟零个或多个非~
个字符。由于*
是贪婪的量词,它会尝试尽可能多地匹配"&"
在匹配的模式周围添加引号g
修饰符答案 1 :(得分:1)
@Oriol,请你试试看,如果这对你有所帮助,请告诉我。
awk '{sub(/~/,s1"&");sub(/^/,s1);print}' s1="\"" Input_file
答案 2 :(得分:0)
echo 'zTG*?KM)ии*v=?~~~~~' | sed -En 's|([^~]+)|"\0"|p'
结果:"zTG*?KM)ии*v=?"~~~~~
它对我有用。