単語を新しい行に置き換える方法

単語を新しい行に置き換える方法

次のデータを含むテキストファイルがあります。各行は|END|

T|somthing|something|END|T|something2|something2|END|

|END|新しい行をsedに置き換えよ\nうとしています。

 sed 's/\|END\|/\n/g' test.txt

ただし、以下のように誤った出力が生成されます。

 T
 |
 s
 o
 m
 e
 ...

しかし、私が望むのはこれです。

T|somthing|something
T|something2|something2

私もそれを試しましたtr。それも動作しません。

答え1

これを使用してください:

sed 's/|END|/\n/g' test.txt

sedが使用しているので、試してみるのはうまくいきません基本正規表現、そしてsed実装には\|「または」(BREの一般的な拡張)を意味する演算子があるので、作成する内容は改行(空文字列またはEND空文字列)に置き換えられます。

答え2

以下は私にとってうまくいきます。

$ sed 's/|END|/\
/g' foobar
T|somthing|something
T|something2|something2

Enterキーの後にバックスラッシュを追加しました。

答え3

あなたはそれを使用することができますawk

$ awk -F'\\|END\\|' '{$1=$1}1' OFS='\n' file
T|somthing|something
T|something2|something2
  • -F'\\|END\\|'フィールド区切り記号を次のように設定します。|END|
  • OFS='\n'出力フィールド区切り文字を改行に設定
  • $1=$1フィールド区切り記号としてawk再構築$0OFS
  • 1真の値なので、awk入力行全体が印刷されます。

答え4

sed空白行を印刷しない別の方法は次のとおりです。

sed 's/|END|/\
/g;/^$/!P;D' infile

たとえば、次のように入力します。

T|one|two|END|T|three|four|END|
T|five|six|END|T|seven|eight|END|
T|nine|ten|END|T|eleven|twelve|END|

出力:

T|one|two
T|three|four
T|five|six
T|seven|eight
T|nine|ten
T|eleven|twelve

同じことed:

ed -s infile <<'IN'
1,$j
s/|END|/\
/g
,p
q
IN

関連情報