sed は正確なパターンで行を削除します。

sed は正確なパターンで行を削除します。

$iファイル内で正確に一致するパターンを見つけて、C1.txtsedコマンドを使用して一致する行を削除しようとしています。でも結局問題にぶつかりました。以下で私が見つけた結果と追加の詳細を見つけてください。

C1.txt

# file: /home/mytest/data # owner: own # group: group-sm user::r-x group::rwx mask::rwx other::--- default:user::rwx default:group::r-x default:group:smr:rwx default:group:agm:r-x default:mask::rwx default:other::---
# file: /home/mytest/datasr123 # owner: own # group: group-sm user::r-x group::rwx mask::rwx other::--- 

変わりやすい

i=/home/mytest/data 

パスワード

#!/bin/bash
Input=C1.txt
  j=0
      while IFS= read -r line;
      do
      j=$((j+1))
        Exists=$(echo $line | grep -iwoP "$i" )
        if [[ ! -z "$Exists" ]]; then
        sed -i "$j /\b"$i"\b/d" "$Input"
        fi
      done <"$Input"

予想される結果

C1.txt

# file: /home/mytest/datasr123 # owner: own # group: group-sm user::r-x group::rwx mask::rwx other::---

エラーメッセージ

sed: -e expression #1, char 3: unknown command: `/'

ベストアンサー1

エラーが発生する理由は、検索文字列に/マーカー文字と混同される文字が含まれているためです。つまり、sed次のように要求します。

sed "//home/mytest/datasr123/d"

これにより表示されるエラーが発生します。 IOW、パターンにはマーカーとして使用する文字を含めることはできません。あなたのパターンがそうであることを知っていればいいえ特定の文字が含まれています。その文字をマーカーとして使用できます。たとえば、その文字が検索文字列にないため、;次のことができます。

sed "\;/home/mytest/datasr123;d"

または、次の点で$i

sed "\;$i;d"

住所の指定方法については、sed下記のマニュアルページを参照してください。Addresses

もちろん、これが役に立つかどうかは、検索文字列に決して現れない文字を知っているかどうかによって異なります。すべての文字をマーカーとして使用できますが、ユーザーが検索文字列を入力した場合、検索文字列が何であるかを保証することはできません。入力が正しい。 select は検索文字列には表示されません。検索文字列に表示されない文字を見つけるには、検索する必要があります。

最も簡単な方法はいいえ完全に動作しますsedが、grepに依存しています(私の愚かな間違いを修正してくれた@Kusalanandaに感謝します):

grep -v -F -e "$i" -- <file>

パターンと一致しない行のみを表示します(たとえば-v-F正規表現ではない文字列を文字通り解釈するようにgrepに指示します。たとえば、文字通り一致します。*パターン.-eaで始まり、-オプションとして解釈されないようにしますgrep--ファイル名aで始まり-、次に解釈されないgrepオプションは次のとおりです。いつもgrepインタラクティブに呼び出すことはほとんど問題ありませんが、このような状況がいつ発生するのかわからないので、スクリプト内で呼び出す方が良いでしょう。grep

ただし、注:質問が編集されており、スキーマの変更は適用されません。すべてこの回答の方法が完了しました。パターンマッチング両方行が入力されるため、すべて削除されます。"$i"両方とも一致するnot forを見つけるなど、パターンを何らかの形で再解釈する必要があります。代わりに、"${i} "最初の行は一致しますが、2番目の行は一致しない追加のスペースを見つけるか、"${i}s"2行目と一致しません。最初の行。また、使用するときは-F文字クラスを使用できないため、\b使用されなくなりました。

おすすめ記事