次の行を含むファイルがあります。
**;**;**;
*(Eng_Sen:This is an Apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
Sedコマンドを使用して、次のパターンを含むすべての行を削除します。
**;**;**;
**;**;**
私を助けてください。ありがとう。
sed '/\*\*;\*\*;\*\*;\?/d' file
\*\*;\*\*;\*\*;\?
:**;**;**
文字列に一致し、オプションで;
文字が続きます。d
:行を削除します。ファイルをその場で編集するには:
sed -i '/\*\*;\*\*;\*\*;\?/d' file
% cat file :(
**;**;**;
*(Eng_Sen:This is an Apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
% sed '/\*\*;\*\*;\*\*;\?/d' file
*(Eng_Sen:This is an Apple)*;*(WordID:1 2 3 4)*;*(message:)*;
%
より一般的には、セミコロンとアスタリスクのみを含む行を削除するには:
sed '/^[*;]\+$/d'
Sedに制限する必要はありませんが:
grep -Ev '^[*;]+$'
コスの答えはすでに仕事をしています。私の答えは正規表現を多少改善するだけです。
グループ化パターン\( \)
とエスケープされた.\+
を使用することにより、グループ全体**;
およびその他のすべての要素に一致するように指示できます。この例では、私が使用しています
$ sed -e "s|\(\*\*;\).\+|TEST|g" stars.txt
TEST
*(Eng_Sen:This is an Apple)TEST
TEST
TEST
*(Eng_Sen:This is an Apple)TEST
TEST
GNU sed
バージョンは、/
だけでなく、置換コマンドの区切り文字として任意の文字を使用できることに注意してください。ここでは、垂直バーを使用していました。
上記の例では、OPの例を3行から6行に増やすために自由を取りました。
$ cat stars.txt
**;**;**;
*(Eng_Sen:This is an Apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
**;**;**;
*(Eng_Sen:This is an Apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
ExモードでVimを使用できます。
ex -sc 'g/\*\*/d' -cx file
g
グローバル検索
d
delete
x
保存して閉じる