[英]How can I use pipe sign or $ sign in quote in bash linux?
我想在 csv 文件中用逗號替換 &|$。 如何使用 bash 來做到這一點?
我會為此使用 perl 。
perl -pe 's/\|/,/g' file.txt
那是替身
\|
Pipe(或 $ 或 &)用反斜杠“保護”它
,
用逗號替換
g
全球范圍內
在純 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
正如所指出的,在純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
,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.