GNU/Linux >> Linux の 問題 >  >> Linux

最初の 4 文字を除くすべての文字を置き換えます

GNU Sed では、

md5sum input.txt | sed 's/./x/5g'

これは、文字列の最初の 4 文字の置換を単純にスキップし、他のすべての文字の置換を実行します。

Awk を使用した POSIX の代替 (おそらくもっと単純なものがあるかもしれませんが)、

md5sum xad | awk '{
  four=substr($0, 1, 4)
  rest=substr($0, 5)
  gsub(/./, "x", rest)
  print four, rest
}' OFS=""

POSIXly (私が思うに)、sed ループを使用して、最初の非 x を繰り返し置き換えることができます 4 文字のプレフィックスに続く文字:

$ md5sum input.txt | sed '
:a
s/^\(....x*\)[^x]/\1x/
ta
'

[^x] を置き換えます [^x ] で 最初のフィールド (チェックサム) でのみ置換を行いたい場合。


perlGNU sed の場合 利用できません:

md5sum input.txt | perl -pe 's/^.{4}(*SKIP)(*F)|./x/g'

^.{4}(*SKIP)(*F) 最初の 4 文字の置換を防ぎます

|. 置換する必要がある代替パターンを指定します


チェックサムのみを変更するには:

md5sum ip.txt | perl -pe 's/(^.{4}|\h.*$)(*SKIP)(*F)|./x/g'

md5sum の場合 出力は \ で始まります (例:ファイル名に改行文字がある場合)、 ^\\?.{4} を使用できます ^.{4} の代わりに 最初の 5 文字をマスクせずに残すことができます。


Linux
  1. Linuxで完全に放送する最初の

  2. 現在のディレクトリのすべてのファイル名で1つの文字を別の文字に置き換える方法は?

  3. Sedは改行文字を置き換えることができますか?

  1. 一致するまですべてのファイルを表示しますか?

  2. 最後を除くすべての改行をスペースに置き換えますか?

  3. ワイルドカード*はコマンドとしてどのように解釈されますか?

  1. 1 つを除くすべてのファイルを移動する

  2. sed を使用して Linux でテキスト ファイルの任意の行の最初の 5 文字を削除する

  3. bashスクリプトで最新の3つを除くすべてのファイルを削除します