0

ファイルの特定の位置に挿入する必要がある文字列があります。

ファイルには複数のセミコロン (;) が含まれています。最後の「;」の直前に文字列を挿入する必要があります。

これは SED で可能ですか?

私はシェルスクリプトが初めてなので、コマンドで説明を投稿してください

前 :

adad;sfs;sdfsf;fsdfs

文字列 = jjjjj

adad;sfs;sdfsf jjjjj;fsdfs

前もって感謝します

4

6 に答える 6

3

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

echo 'adad;sfs;sdfsf;fsdfs'| sed 's/\(.*\);/\1 jjjjj;/'
adad;sfs;sdfsf jjjjj;fsdfs

\(.*\)は貪欲で、行全体を飲み込みます。;は、正規表現を最後の;. メイクサ\(.*\)バック リファレンス\1. コマンドの RHS にすべてをまとめるとは、最後の の前にs挿入することを意味します。jjjjj;

于 2012-05-17T15:49:35.330 に答える
1
sed 's/\([^;]*\)\(;[^;]*;$\)/\1jjjjj\2/' filename

jjjjj(挿入する必要があるものに置き換えます)。

例:

$ echo 'adad;sfs;sdfsf;fsdfs;' | sed 's/\([^;]*\)\(;[^;]*;$\)/\1jjjjj\2/'
adad;sfs;sdfsfjjjjj;fsdfs;

説明:

sed次のパターンを見つけます: \([^;]*\)\(;[^;]*;$\). エスケープされた丸括弧 ( \(, ) は番号付きのグループを形成するため、後でおよび\)として参照できます。\1\2

[^;]*は「 以外のすべて;、何度でも繰り返されます。

$行の終わりを意味します。

次に、に変更し\1jjjjj\2ます。

\1\2は、1 番目と 2 番目の丸括弧で一致するグループです。

于 2012-05-17T13:39:25.067 に答える
1

sed今のところ、 : =)を使用した短いソリューション

sed -r 's@;([^;]+);$@; jjjjj;\1@' <<< 'adad;sfs;sdfsf;fsdfs;'
  • -r オプションは拡張正規表現を表します
  • @ は区切り文字です。既知の区切り文字は/他の文字に置き換えることができます
  • 最後のもので;はないものによって仕上げるものを一致させます。つまり、行の終わりを意味します;$
  • 私の説明の最後の部分は()
  • 最後に、「; jjjj」を追加して一致する部分を置き換え、それをキャプチャされた部分と連結します

編集:POSIXバージョン(移植性が高い):

echo 'adad;sfs;sdfsf;fsdfs;' | sed 's@;\([^;]\+\);$@; jjjjj;\1@'
于 2012-05-17T13:40:51.257 に答える
0
sed -e 's/\(;[^;]*\)$/ jjjj\1/'

行末のセミコロンの後に任意の数の非セミコロン ( [^;]*)が続く部分の前に jjjj を挿入し$ます。は後方参照\1と呼ばれ、と の間で一致する文字を含みます。\(\)

更新:サンプル入力に「;」がなくなったため 最後に。

于 2012-05-17T13:51:11.313 に答える
0
echo 'adad;sfs;sdfsf;fsdfs;' | sed -r 's/(.*);(.*);/\1 jjjj;\2;/'

; の否定は必要ありません。sed はデフォルトで貪欲で、できるだけ多くの文字を選択するためです。

于 2012-05-17T13:52:34.633 に答える
0

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

echo "adad;sfs;sdfsf;fsdfs"| awk 'BEGIN{FS=OFS=";"} {$(NF-1)=$(NF-1) " jjjjj"; print}'

出力:

adad;sfs;sdfsf jjjjj;fsdfs

説明: awk は、FS (フィールドセパレーター) と OFS (出力フィールドセパレーター) をセミコロンとして設定して開始します;NFawk は を表しnumber of fieldsます。$(NF-1)したがって、last-1 フィールドを意味します。この awk コマンドでは、last-1 フィールドに{$(NF-1)=$(NF-1) " jjjjj"追加するだけです。jjjjj

于 2012-05-17T13:32:23.030 に答える