7

次の内容のファイルがあります。

aaaabbaaabbaa

そして、次のような出力が必要です:

aaaa
bbaaa
bbaa

が最初に出現する前に新しい行を追加する必要があり'b'ます。bashで使用するにはSEDコマンドのみが必要です

次のコマンドを使用しています。私はそれが今完璧なものであることを知っています..

これよりも優れたコマンドを誰か教えてください。bashで使用する必要があるSEDコマンドのみに注意してください

sed -i.bak  -e 's/bb/qbb/g' input.txt  
sed -i.bak  -e 's/qbb/\'$'\nbb/g' input.txt
4

9 に答える 9

2

a入力文字列に実際にand文字のみが含まれている場合、 withbのすべてのインスタンスを単純に置き換えるだけで問題が悪化すると思います。この場合は、完全に省略して bash のシェル パラメータ拡張機能を使用できます。aba<newline>bsed

ターミナルで:

$ str="aaaabbaaabbaa"
$ echo "${str//ab/a
> b}"
aaaa
bbaaa
bbaa
$ 

またはシェルスクリプトで:

$ cat ab.sh 
#!/bin/bash
echo "${1//ab/a
b}"
$ ./ab.sh "aaaabbaaabbaa"
aaaa
bbaaa
bbaa
$ 

これは、OSX 10.8.5 で動作します。

この情報は、apple.com がホストするbash マンページでも入手できます。そのページで「パラメータ/パターン」を検索します。

于 2013-12-12T05:27:28.490 に答える
1

これはあなたのために働くかもしれません:

sed -e :a -e '/ab\(.*\)\(.\)$/!b' -e G -e 's//a\2b\1/' -e ta file

これは現在の行をループし、任意のab組み合わせをに置き換えますa\nb。sed の新しいインスタンスが作成されるときに改行が常に存在するというホールド スペースの副作用を使用します。

もちろん:

sed 's/bb*/\n&/g' file

また:

sed 's/bb*/'"\n"'&/g' file

はるかに簡単ですが、おそらく sed または bash の GNU バージョンに依存します。

于 2013-12-06T13:33:51.487 に答える
1

醜いawkバージョン:)

echo "aaaabbaaabbaa" | awk '{for (i=1;i<=NF;i++) {printf ($i=="b" && f!="b" ?"\n":"")"%s",$i; f=$i}} END {print ""}' FS=
aaaa
bbaaa
bbaa

gnu awkバージョン_

echo "aaaabbaaabbaa" | awk '{$1=$1} NR>1 {$0=RS $0;} 1' RS="bb"
aaaa
bbaaa
bbaa

もう一つawkbのいずれかまたはグループbを改行とそれ自体に置き換えます&

echo "aaaabbaaabbaa" | awk 'gsub(/b+/,"\n&")'
aaaa
bbaaa
bbaa
于 2013-10-25T12:55:30.690 に答える
1

改行を回避したい場合bは、行頭で発生し、この POSIX 準拠のすべてが発生します。

$ echo -e "aaaabbaaabbaa\nbbaaaabbaaabbaa" | sed -e 's/\([^b]\)b/\1\nb/g'
aaaa
bbaaa
bbaa
bbaaaa
bbaaa
bbaa
于 2013-12-10T19:03:48.953 に答える
1
echo "aaaabbaaabbaa\nbbaabba" | sed 's/\([^b]\)b/\1\
b/g'

aaaa
bbaaa
bbaa
bbaa
bba

posix に準拠しており、行が ab で始まる場合、新しい行を作成しません

于 2013-12-06T10:45:31.090 に答える
1

あなたは言えた:

$ echo aaaabbaaabbaa | sed 's/b\{1,\}/\'$'\n&/g'
aaaa
bbaaa
bbaa

また

$ echo aaaabbaaabbaa | sed $'s/b\{1,\}/\\\n&/g'
aaaa
bbaaa
bbaa

sed正規表現を拡張正規表現として解釈させるには、次の-Eオプションを使用できます。

$ echo aaaabbaaabbaa | sed -E 's/b+/\'$'\n&/g'
aaaa
bbaaa
bbaa
于 2013-12-12T10:12:35.717 に答える