簡體   English   中英

如何在 bash linux 中使用 pipe 符號或 $ 符號引用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM