如何“cat”一个文件并删除注释行?

cwd*_*cwd 33 linux command-line grep replace cat

我想知道是否有一种方法可以cat归档php.ini并删除所有以开头的行;

例如,如果文件包含以下内容:

;   - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE
;
;   - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
;
;   - Show all errors except for notices
;
error_reporting  =  E_ALL & ~E_NOTICE
Run Code Online (Sandbox Code Playgroud)

我运行了正确的命令cat | {remove comments command},然后我会得到:

error_reporting  =  E_ALL & ~E_NOTICE
Run Code Online (Sandbox Code Playgroud)

-我认为cat会做到这一点的最好办法,但实际上,我细使用其他实用程序一样的答案awksedegrep,等。

fav*_*adi 35

您可以使用:

sed -e '/^;/d' php.ini
Run Code Online (Sandbox Code Playgroud)


bsd*_*bsd 32

您不需要通过 grep 管道文件,grep 将文件名作为命令行参数。

grep -v '^#' file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

将打印除以 # 字符开头的行之外的所有行。您可以将评论字符更改为您想要的任何内容。

如果您有多个评论字符(假设它在一行的开头)

egrep -v '^(;|#|//)' filelist
Run Code Online (Sandbox Code Playgroud)

  • 我做过的另一个一直困扰着我的是`grep '^[^;]' filename`。我不能说它的便携性! (2认同)

nro*_*ans 10

egrep可以节省您的使用cat。换句话说,创建更少的进程(egrepvs cat+ egrep)并使用更少的缓冲区(从管道categrep与没有管道)。

cat如果您只是想将文件传递给可以自行读取的命令,则限制使用通常是一个好主意。

话虽如此,以下命令将删除注释,即使它们用空格或制表符缩进:

egrep -v '^[[:blank:]]*;' 文件.ini


Tim*_*edy 8

egrep -v '^;|^$' $file
Run Code Online (Sandbox Code Playgroud)

这将排除以“;”开头的行和空行。

在正则表达式中,^表示行首和$行尾,因此^$指定行首字符和行尾字符紧挨着的行。

  • 我们需要一个“无用的猫”徽章。 (10认同)
  • egrep 也喜欢文件(使用较少的进程和缓冲区),还有一点好处是删除缩进的注释:`egrep -v '^[[:blank:]]*;' 文件.ini` (4认同)