0

changesfile という名前のファイルから sed に引数を正しく渡そうとしていますが、失敗しています。ファイル changesfile の内容または for ループの使用方法である可能性があります。わからない。

私が使用しているコマンド:

cat changesfile | while read i ; do sed -e "s/$i//g" "filename" ; done
cat changesfile | while read i ; do sed -i "s/$i//g" "filename" ; done
cat changesfile | while read i ; do sed -e '/$i/d' filename ; done
cat changesfile | while read i ; do sed -e '/"$i"/d' filename ; done

ファイル内の特定の行を大量のメタ文字と一致させる必要があります。一致させて削除しようとしているものは以下のとおりです。

fileattribute[hostname.stile.tib.area2]=Disk /var;default_queue;area-unix
fileattribute[hostname.stoop.trb.area]=Disk /tmp;default_queue;area-unix

情報を sed に正しく渡すためのワイルドカードとエスケープ文字を含む changesfile の内容は次のとおりです。

.*hostname\.stoop\.trb\.area.*Disk.*\/tmp.*area\-unix$
.*hostname\.stile\.tib\.area2.*Disk.*\/var.*area\-unix$

これまでのところ、何も機能していません。一部のコマンドは、正規表現とその他のものを削除します。理由がわからない。どんなアドバイスでも大歓迎です。私の職場ではまだ誰も役に立っていません。

4

1 に答える 1

0

以下を試してください

#!/bin/bash
sed -i -r -f changesfile filename

説明

  1. -r- スクリプトで拡張正規表現を使用します。特殊文字をエスケープする必要はありません。
  2. -f- 実行するコマンドに script-file の内容を追加します。
于 2013-01-24T04:45:52.170 に答える