web-dev-qa-db-ja.com

sedコマンドを使用してアスタリスクを含む行を削除する方法

次の行を含むファイルがあります。

**;**;**;
*(Eng_Sen:This is an Apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**

Sedコマンドを使用して、次のパターンを含むすべての行を削除します。

**;**;**;
**;**;**

私を助けてください。ありがとう。

3
JalT
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:)*;
% 
1
kos

より一般的には、セミコロンとアスタリスクのみを含む行を削除するには:

sed '/^[*;]\+$/d'

Sedに制限する必要はありませんが:

grep -Ev '^[*;]+$'
1
glenn jackman

コスの答えはすでに仕事をしています。私の答えは正規表現を多少改善するだけです。

グループ化パターン\( \)とエスケープされた.\+を使用することにより、グループ全体**;およびその他のすべての要素に一致するように指示できます。この例では、私が使用しています

$  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:)*;
**;**;**
0

ExモードでVimを使用できます。

ex -sc 'g/\*\*/d' -cx file
  1. gグローバル検索

  2. d delete

  3. x保存して閉じる

0
Steven Penny