スラッシュとコンマの間(含む)の間のすべてのテキストを削除します。

スラッシュとコンマの間(含む)の間のすべてのテキストを削除します。

同様のレイアウトの何千もの文字列を含む.txt文書があり、一部の行には望ましくない追加情報が含まれています。

例は次のとおりです。

202212_08,ABC123/A1234,AB,,C123
202212_08,CDEF1233/A5678,FG,,C345

出力が次のようになります。

20221208,ABC123,C123
20221208,CDEF1233,C344

正規表現を試しましたが、エラーが発生し続け、出力が空です。ご協力ありがとうございます。

答え1

そしてsed

$ sed -e 's:/.*,:,:' input.txt 
202212_08,ABC123,C123
202212_08,CDEF1233,C345

これにより、/行の最初の文字から行の最後の文字まで、,すべての内容が単一の文字に置き換えられます,


ただし、入力データに複数のフィールドが含まれている場合は、通常、awkまたはperlを使用することをお勧めします。各フィールドを個別に操作および/または印刷できるためです。

たとえば、次のawkスクリプトは組み込み関数を使用して/.*各入力行から2番目のフィールドを削除し、最初の()、2番目()、および最後の()フィールドを印刷します。sub()$1$2$NF

$ awk -F, -vOFS=, '{sub(/\/.*/,"",$2); print $1, $2, $NF}' input.txt 
202212_08,ABC123,C123
202212_08,CDEF1233,C345

またはパールを使用してください:

$ perl -F, -lane '$F[1] =~ s:/.*::; print join(",",@F[0,1,-1])' input.txt 
202212_08,ABC123,C123
202212_08,CDEF1233,C345

この-F,オプションはフィールド区切り文字(awkに似ています)を設定します。この-aオプションを使用すると、入力は自動的に名前付き配列に分割されます@F。 Perlの行末の自動処理(改行文字など)を-l有効にし、Perlがそのように機能するようにします。 Perlに、次の引数が実行されるスクリプトであることを伝えます。\n-nsed -n-e

$F[1]Perl配列の索引付けは、配列の2番目の要素と同様に、1ではなく0から始まり、配列@Fスライスは@F[0,1,-1]配列の最初、2番目、および最後の要素です。

関連情報