2017-09-19 23 views
0

私はいくつかのQ &を読んでいます。 sedを使用しているときに特殊文字が問題になることは理解していますが、パターンに存在するかどうかわからずに対処する方法はありますか?私の特定の場合にはsedで特殊文字を含む行にテキストを挿入するには?

、私はファイル(file.txt)を持っているようには、次のとおりです。

my line 1. 
my line two. 
... 
this is [ -f another line ] 

私は、ランダムな行の末尾にテキスト(my{Text})を挿入しようとしています。 $LINEthis is [ -f another line ]を含む行ないとき

MAX=$(wc -l < file.txt) 
Q1=$(expr $MAX/4) 
Q3=$((3 * $MAX/4)) 
LINENUMBER=$(shuf -i $Q1-$Q3 -n1) 
LINE="$(head -n $LINENUMBER file.txt | tail -1)" 
sed -i -e "${LINENUMBER}s~$LINE~$LINE my{Text}~g" file.txt 

このコードはうまく動作します。この場合、$LINE my{Text}$LINEを置き換えません。

したがって、sedを使用してエスケープする必要のあるランダムパターンを処理するにはどうすればよいですか?

私はGNU bash 4.3.11(1)とsed(GNU sed)4.2.2を使用しています。

答えて

1

行末にテキストを追加するので、既存の行の内容をsed式に入れる必要はありません。

にかかわらずに追加された行は、任意の特殊文字を持っているかどうかの働くだろう
sed -i -e "${LINENUMBER}s~$~ my{Text}~" file.txt 

:だから、あなたはあなたのようコマンドを書くことができます。

として全体のコードは、より効率的に記述することができ

max=$(wc -l < file.txt) 
q1=$((max/4)) 
q3=$((3 * max/4)) 
line=$(shuf -i $q1-$q3 -n1) 
sed -i -e "${line}s~$~ my{Text}~" file.txt 

も参照してください:Bash tool to get nth line from a file

関連する問題