特殊文字を削除し、間に同じ数のスペースを入れたいです。

特殊文字を削除し、間に同じ数のスペースを入れたいです。

いくつかの特殊文字を含むテキストファイルがあります。

L$+M)jX];&?+jip=ZjJ#}^yV5;fBQ=$L+tG=#x4kDh('t%BWBG/P|U9M`,pcII*6G<r 

同じ量の空白文字が削除されたいくつかの文字を削除したかったです。これを削除し、fBQ=$L+tG=#x4kDh('t%BWBG/P|U9M同様の数の文字に置き換えたいと思います。


キャラクターカウンターによると:

L$+M)jX];&?+jip=ZjJ#}^yV5;fBQ=$L+tG=#x4kDh('t%BWBG/P|U9M`,pcII*6G<r 

fBQ=$L+tG=#x4kDh('t%BWBG/P|U9M68文字です。同じ30文字のスペースに置き換えたいと思います。

答え1

これに使用できます。パターンにsedaがあるので少しトリッキーです。これはsedで使用する必要があることを意味し、それを見ないようにエスケープする必要があります。 「行末」としても二重引用符を使用するため、シェルはそれを変数として認識しません。最後にaもあるので、代替演算子に別の文字を使用する必要があります。これらすべてを念頭に置いて、次のように目的の作業を実行する必要があります。'"$sed/

$ sed "s:fBQ=\$L+tG=#x4kDh('t%BWBG/P|U9M:                              :" file
L$+M)jX];&?+jip=ZjJ#}^yV5;                              `,pcII*6G<r 

変数に文字列を渡して置き換えることができるより一般的な解決策の場合は、次のように試してみてください。

$ export var="fBQ=\$L+tG=#x4kDh('t%BWBG/P|U9M"
$ perl -pe '$f=quotemeta($ENV{var}); s/$f/" " x length($f)/e' file
L$+M)jX];&?+jip=ZjJ#}^yV5;                                        `,pcII*6G<r 

答え2

これがあなたがしたいことですか?文字列を空白に置き換えますか?

$ cat str
fBQ=$L+tG=#x4kDh('t%BWBG/P|U9M

$ cat file
L$+M)jX];&?+jip=ZjJ#}^yV5;fBQ=$L+tG=#x4kDh('t%BWBG/P|U9M`,pcII*6G<r

$ awk 'NR==FNR{str=$0; lgth=length(str); next} s=index($0,str){$0=substr($0,1,s-1) sprintf("%*s",lgth,"") substr($0,s+lgth)} 1' str file
L$+M)jX];&?+jip=ZjJ#}^yV5;                              `,pcII*6G<r

上記は改行以外の文字列のすべての文字に対して、すべてのUNIXボックスのすべてのシェルでawkを使用して機能します。

関連情報