一重引用符で囲まれ、カンマで区切られた単語を含む行を列に変換

一重引用符で囲まれ、カンマで区切られた単語を含む行を列に変換

私はこのファイルを持っています:
'dog', 'cat', 'horse', 'turtle'

この行を次に変換したいと思います。

dog
cat
horse
turtle

カンマを区切り文字として使用し、trコマンドを使用すると、次のようにできます。
tr -s ',' '\n' < file

出力を含む

'dog'
 'cat'
 'horse'
 'turtle'

ただし、区切り文字として使用すると機能しません', '

tr -s '\', \'' '\n' < file

一重引用符をエスケープするために二重バックスラッシュを使用しても、まだ機能しません。端末から得られる唯一の出力は>

目的の出力を得るために一重引用符を正しくエスケープする方法は?

ベストアンサー1

入力を引用符付きCSVとして処理し、各カンマ区切り文字の後にスキップできるスペースを追加し、引用符で標準二重引用符の代わりに一重引用符を使用してcsvformatデータ型を再指定できます。

$ csvformat -S -q "'" -D $'\n' file
dog
cat
horse
turtle

これはcsvformat、withを使用して-S各区切り文字の後の最初の空白文字をスキップし、-q "'"入力引用符文字を一重引用符に設定し、出力フィールド区切り文字を改行-D $'\n'文字に設定します。

これによりファイルが再フォーマットされます。

埋め込み改行を使用するすべてのフィールドは、埋め込み二重引用符を含むフィールドと同様に、出力から引用されます。

おすすめ記事