ファイル内の1行だけを削除する

ファイル内の1行だけを削除する

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

SUKsoft:
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

「SUKsoft:」という行を削除するにはどうすればよいですか?

この行は、ファイル内の任意の場所(現在のように先頭でも、途中でも)に存在する可能性があります。

これを行うコマンドはありますか?

答え1

取り除くラインの使用

sed -i '/SUKsoft:\s*$/d' your_file 

% cat foo
SUKsoft: 
SUKsoft: App-Conduct_Risk_Comment   
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

% sed -i '/SUKsoft:\s*$/d' foo

% cat foo                    
SUKsoft: App-Conduct_Risk_Comment   
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

答え2

目的の行を削除する手順は次のとおりです。

$ sed 's/SUKsoft: *$//' file.txt

SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

file.txt行が含まれていると想定しています。

または、

$ sed 's/SUKsoft: *$//; /^$/d' file.txt
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

それは何も残さない空白ライン。

ファイルを編集するには、

sed -i 's/SUKsoft: *$//' file.txt

または

sed -i 's/SUKsoft: *$//; /^$/d' file.txt

必要に応じて。

見るABの回答では、より簡潔にまとめられています。ワイルドカード

答え3

grepパターンを満たす行を検索します。 grep -v 破棄するパターンを満たす線。

grep -v '^SUKsoft: *$'

パターンは次のようになります:^で始まる行 ( ) SUKsoft:。その後にスペースが続く場合もありますが、行末 ( $) まで他には何もありません。

答え4

あなたの生のソースを投稿する「SUKsoft:」の後にはスペースやスペースの連続はありませんが、安全のために、このコマンドは、存在する場合はそれらを処理します。

Perl の使用:

perl -ne '!/^SUKsoft: *$/&&print' input
  • !/^SUKsoft:$/&&print^SUKsoft: *$: 現在の行が、文字列で始まりSUKsoft:、その後に 0 個以上のスペースが続く行に一致するパターンに一致しない場合は、その行を出力します。
% cat input
SUKsoft:
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW
% perl -ne 'print unless /^SUKsoft: *$/' input
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

関連情報