我想用 csv 檔案中的逗號替換 &|$ 。我如何使用 bash 做到這一點?
uj5u.com熱心網友回復:
正如所指出的,在純 bash
$: x='&|$'
$: echo ${x//[&|$]/,}
,,,
如果要將整個字串轉換為單個逗號,
$: echo ${x//'&|$'/,}
,
如果您想將這些字符的任何連續集轉換為單個逗號...
$: shopt -s extglob; echo ${x// ([&|$])/,}
,
處理整個檔案可以使用讀取回圈來決議每一行,或者更多的一次決議,但有一些注意事項 - 讀取回圈通常更安全。無論哪種方式,都要小心參考。
$: shopt -s extglob; x="$(<x)"; printf "%s\n" "$x" "***" "${x//'&|$'/,}"
&|$
foo
&|$
bar
&|$
baz
&|$
***
,
foo
,
bar
,
baz
,
但一般來說,我會使用類似的東西 sed
$: sed -E 's/\&\|\$/,/g' x # every occurrence of this exact sequence
,
foo
,
bar
,
baz
,
或者 awk
$: awk '{gsub("[&|$] ",",")}1' x # any consecutive combination of these characters
,
foo
,
bar
,
baz
,
在最簡單的情況下,如果您只是嘗試轉換美元符號并因各種元字符而遇到困難,@Hasturkun 的建議tr非常好。
$: echo '&|$foo
> &|$bar
> &|$baz
> ' | tr '$' ,
&|,foo
&|,bar
&|,baz
uj5u.com熱心網友回復:
在純 bash 中,shell 本身沒有內置任何工具:
#!/usr/bin/env bash
# ^^^^ - run this with _bash_, not sh
while IFS= read -r line; do
printf '%s\n' "${line//[&$|]/,}"
done <in.csv >out.csv
uj5u.com熱心網友回復:
我會為此使用 perl。
perl -pe 's/\|/,/g' file.txt
那是替代品
\| 帶有反斜杠的管道(或 $ 或 &)以“保護”它
, 用逗號代替
g 全球范圍內
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/363379.html
