Unixはファイル内の変数(スラッシュを含む)を検索して削除します。

Unixはファイル内の変数(スラッシュを含む)を検索して削除します。

変数 "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/

次のコマンドを試しました。

  1. sed "/$nt/d" text1

    sed: -e expression #1, char 3: unknown command: `u'
    
  2. sed "|$nt|d" text1

    sed: -e expression #1, char 1: unknown command: `|'
    
  3. 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

$ここでは、シェルの行末アンカーを参照する必要があります\$

関連情報