Awk 如何删除";0“-文件夹中多个FLE的行?

Awk 如何删除";0“-文件夹中多个FLE的行?,awk,sed,grep,Awk,Sed,Grep,每个文件的名称都以“input”开头。文件的一个示例如下所示: 0.0005 lii_bk_new traj_new.xyz 0 73001 146300 我想删除仅包含“0”的行,预期输出为: 0.0005 lii_bk_new traj_new.xyz 73001 146300 我试过了 sed -i 's/^0\n//g' input_* 及 但两者都不起作用。 请给出一些建议。请尝试将尝试的代码更改为以下代码,在单个输入文件上运行一次 sed 's/^0$//' In

每个文件的名称都以“input”开头。文件的一个示例如下所示:

0.0005
lii_bk_new
traj_new.xyz   
0
73001
146300 
我想删除仅包含“0”的行,预期输出为:

0.0005
lii_bk_new
traj_new.xyz   
73001
146300
我试过了

sed -i 's/^0\n//g' input_*

但两者都不起作用。

请给出一些建议。

请尝试将尝试的代码更改为以下代码,在单个输入文件上运行一次

sed 's/^0$//' Input_file
或根据OP的注释删除空行:

sed 's/^0$//;/^$/d' Input_file
我故意不在这里放-I选项,首先在一个输出文件中测试它,然后在多个文件上仅使用-I选项运行

您尝试中的另一个问题是,您正在将
\n
放入
sed
的regex中,这是行的默认分隔符,我们需要在其中放入
$
,告诉sed删除以0开头和结尾的行

如果您想备份文件(考虑到您的文件系统中有足够的可用空间),您也可以使用sed的
-i.bak
选项,它将在编辑之前备份每个文件(这不是必需的,但为了安全起见,您也有此选项)。

请给出一些建议

我将使用GNU
awk-I inplace
实现以下目的:

awk -i inplace '!/^0$/' input_*
这只会保留所有与
^0$
不匹配的行,即(行首)0(行尾)。如果你想了解更多关于
-我建议阅读

在regexp中,您将
\n
$
混淆(字符串sed中不存在的文本换行字符正在分析中,因为sed一次读取一行分隔的代码)(字符串结尾regexp元字符,当解析的字符串是一行时表示行的结尾,默认情况下与sed相同)


脚本中的另一个错误是将匹配行中的0替换为null,而不是仅删除匹配行。

当您尝试修改一个文件时会发生什么情况?@Beta对于一个文件,我尝试的两种方法都无法删除任何内容,即输入文件未更改。我明白了。
sed's/^0$//g'input_file | sed'/^$/d'
wWorks@jiadong,如果这对您也有帮助的话,您可以尝试一次类似于:
sed的/^0$/;/^$/d'Input_file
这样的组合方法?这个答案更简单、更优雅!如果是您的首选解决方案,请随意接受。
awk -i inplace '!/^0$/' input_*
$ sed '/^0$/d' file
0.0005
lii_bk_new
traj_new.xyz
73001
146300