Bashを使用して2つの単語間のカンマ(、)を削除する方法

Bashを使用して2つの単語間のカンマ(、)を削除する方法

2つの単語間のカンマ(、)を削除するには?

どのようにこれらの2つの単語を2つの異なる行に入れることができますか?

これは私の入力です。

ent0
ent4
ent1,ent5
ent2,ent6
ent3,ent7
ent29,ent30

答え1

tr ',' '\n'

入力ファイルのすべてのsを改行文字に置き換えます。,これは必要に応じて聞こえます。

答え2

使用tr:

$  tr ',' '\n' < FILE
ent0
ent4
ent1
ent5
ent2
ent6
ent3
ent7
ent29
ent30

答え3

使用bash:

#!/bin/bash
while IFS='' read -r line; do 
    echo "${line//,/$'\n'}";
done <infile.txt

またはsed

sed -e $'s/,/\\\n/g' infile.txt 

または

sed 's/,/\
/g' infile.txt 

答え4

cut次のように使用できます。

あなたのデータがどこから来るのかわかりません。しかし、次のアドレスにあなたの情報を送ることができると確信していますcut

cat yourfile.data | cut -d, --output-delimiter ' ' -f 1,2

~によると man cut

...
-d, --delimiter=DELIM
       use DELIM instead of TAB for field delimiter
--output-delimiter=STRING
       use STRING as the output delimiter the default is to use the input delimiter
-f, --fields=LIST
       select only these fields;  also print any line that contains no delimiter character, unless the -s option is specified
...

ただし、追加のロジックを追加する必要がある場合は、sed@RomanPerekhrestが言った内容を使用することをお勧めします。強力な正規表現を使用すると、データをより柔軟に解析できます。私の考えでは、これを行うための最良の正規表現は次のとおりです。

'/^\s*\([^,]\+\)\s*,\s*([^,]\+\)\s*$/'

〜0個以上のスペースの後にカンマを除くすべてのエントリ、0個以上のスペース、カンマ、0個以上のスペースの後にカンマを除くすべてのエントリ、0個以上のスペースが続きます。

関連情報