CSV ファイル内の特定の文字の後の列に表示されるすべてのコンテンツを削除する必要があります。現在の形式は次のとおりです。
2020-01-01T12:00:00,Transaction Description,Initiator,$00.00
最初の列の T の後に表示される内容を削除して、次のようにします。
2020-01-01,Transaction Description,Initiator,$00.00
sed を試しましたが、期待通りに動作しませんでした。
答え1
標準をsed
同様に使用するTimurはPerlを使用しています:
$ sed 's/T[^,]*//' file
2020-01-01,Transaction Description,Initiator,$00.00
T
これは、置換によって、各行の先頭から最初のコンマまで(コンマは含まない)のすべてのテキストを削除します。
結果を保存するには、新しいファイルにリダイレクトします。
答え2
次の Perl ワンライナーを使用します。
perl -pe 's{T[^,]*}{}' input_file > output_file
ここで、
-e
コマンド ライン フラグは、指定されたスクリプト内のコードを探すのではなく、
-p
インラインで後続のコードを使用するように Perl に指示し、指定されたコードの実行後にそれを印刷するように Perl に指示し、0 回以上 (貪欲な、つまり最長一致を指定します)以外の任意の文字が続くものを
s{T[^,]*}{}
置き換えます。これにより、最初の T から始まり、最初の後続のコンマから終わる文字が「消費」されます (T は含む)。T
,
*
答え3
方法1:
awk -F "," 'OFS=","{gsub(/T.*/,"",$1);print $0}' filename
出力
2020-01-01,Transaction Description,Initiator,$00.00
コマンド2
perl -pne "s/,/\n/g" filenmame| sed '/.T/s/T.*//g'|perl -pne "s/\n/,/g"| sed "s/,$//g"
出力
2020-01-01,Transaction Description,Initiator,$00.00
方法3
#!/usr/bin/python
import re
p=re.compile(r'T.*')
k=open('p.txt','r')
for i in k:
l=i.split(",")
z=re.sub(p,"",l[0])
rt=",".join(l[1:])
er=",{0}".format(rt)
print z+er,
出力
2020-01-01,Transaction Description,Initiator,$00.00