変数 "nt"(スラッシュを含む)を検索する必要があります。ファイルtext1からその内容を含むすべての行を削除します。
$ echo $nt
/u01/app/us1fa01_0/
$ cat text1
/u01/app/fa01/
/u01/app/us1fa01_0/
/u01/app/us1fa01_ps6/
予想出力 -
$ cat text1
/u01/app/fa01/
/u01/app/us1fa01_ps6/
次のコマンドを試しました。
sed "/$nt/d" text1
sed: -e expression #1, char 3: unknown command: `u'
sed "|$nt|d" text1
sed: -e expression #1, char 1: unknown command: `|'
sed '\|"$nt"|d' text1
/u01/app/fa01/ /u01/app/us1fa01_0/ /u01/app/us1fa01_ps6/
上記のコードのどれもうまくいかないようです。脱出口を探して
答え1
そしてgrep:
grep -Fv -f <(echo "$nt") text1
-F
- パターンを固定文字列のリストとして解釈する-v
- 一致しない行を選択するために一致の意味を反転します。-f
- ファイルからパターンを1行に1つずつインポートします。
出力:
/u01/app/fa01/
/u01/app/us1fa01_ps6/
答え2
GNU sedを使用すると(他のsed実装についてはわかりません)を使用できます。ここで文字は何でもあります\%pattern%
。%
したがって、以下が機能します。
sed "\%$nt%d" text1
答え3
$ sed "\#$nt#d" text1
/u01/app/fa01/
/u01/app/us1fa01_ps6/
sed
として引用すると、どのパターン区切り文字でも使用できます\
。
これは失敗する$nt
文字が含まれている場合#
。この場合は、別の区切り文字を使用してください。
これにより、その行の任意の場所からパターンを含むすべての行が削除されます。
パターンがライン全体に一致するように強制するには、次のようにします。
$ sed "\#^$nt\$#d" text1
$
ここでは、シェルの行末アンカーを参照する必要があります\$
。