grepを使用してファイルからコメントを削除する

grepを使用してファイルからコメントを削除する

grepを使用してファイル(特にsmb.conf)からコメントを削除しようとしていますが、bashでエラーが発生します。この問題を発見しましたファイルからすべてのコメントを削除する方法は?これはgrepにこれを行う構文を提供しますが、ファイルを上書きせずに端末に印刷するだけです。効果的にファイルを上書きしたいと思います。問題は次のとおりです。

 $ sudo grep -o '^[^#]*' /etc/samba/smb.conf >> /etc/samba/smb.conf
-bash: /etc/samba/smb.conf: Permission denied

以前も同様のことをしたことがありますが、オンラインガイドに従い、grepを実行する前にbashを起動する必要があったことを思い出させます。明らかに、もはやそのガイドが見つかりません。

grepを使ってファイルからコメントを削除するには?

私はRaspbian Jessieを実行するRaspberry Pi B +を開発しています。

答え1

sed -i -e 's/#.*$//' -e '/^$/d' inputFile

すべてのコメントを削除するだけでなく、空白行も削除します。私はあなたがgrepで要求したことを知っていますが、これを提案すると思いました。機能的には、空行を削除してファイルサイズを圧縮すると、同じかまたはより良いです。これが目標だと思います。

編集:はい、次のよう#に置き換えると;大丈夫でしょう。少なくとも私のCentOS 6システムで動作します。無効な文字などについて文句を言う場合は、\前に文字を入れることをお勧めします。;

答え2

sedは、ファイルを「直接」編集できるようにするオプションです(ファイルの一時コピーを作成することによって)。このコマンドは、sedに-i/etc/samba/smb.confを内部で編集し、デフォルトで-n行を印刷しないように指示します。

sudo sed -i -n '/^[^#]/ p' /etc/samba/smb.conf

「p」は、grep正規表現に一致する行を印刷することを知らせます。不要な末尾を削除するためにわずかに修正しました*。ここで正規表現は、「一致を次に除算した値」を意味します。オクトソフ」。

答え3

パターンは具体的でなければならず、線を越えてはいけません。含むㅏ '#':

sudo sed -r -i 's/^[[:space:]]*#.*$//' /etc/samba/smb.conf

質問は実際には空行を削除する必要はありません。このコマンドは空行を保持します(交換による空行も含めます)。

他のソリューションと同様に、これは-i非標準オプションに依存します(参照:POSIX)および-r(また非標準)。オプションの使用は次のように異なります。プラットフォーム、間違いなく。

関連情報