sed多条件正则表达式匹配

时间:2019-07-12 15:29:41

标签: regex bash sed

我正在制作一个bash脚本,它将txt文件作为输入,从其中删除所有包含破折号(“-”)或任何整数(行中的任何地方)的行,并将其解析为新文件。

我尝试了多种方法,但我成功了0次。

由于我无法使其正常工作,因此我一直试图找出正确的正则表达式来“删除包含数字或破折号的所有行”。

这是我的代码:

wget -q awsfile1.csv.zip                      # downloads file
unzip "awsfile1".zip                          # unzips it
cut -d, -f 2 file1.csv > file2.csv            # cuts it
sort file2.csv > file2.txt                    # translates csv into text
printf "Removing lines containing numbers.\n" # prints output
sed 's/[0-9][0-9]*/Number/g'  file2.txt > file2-b.txt  # doesn't do anything, file is empty on the output

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以将剪切和过滤合并为一个awk脚本,然后进行排序

... get and unzip file
$ awk -F, '$2!~/[-0-9]/{print $2}' file | sort

如果不包含任何数字或连字符,则打印字段2。

答案 1 :(得分:1)

这可能对您有用(GNU sed):

sed -E 'h;s/\S+/\n&\n/2;/\n.*[-0-9].*\n/d;x' file

复制当前行,隔离第二个字段,然后删除包含必需字符串的行,否则恢复为原始行。

这将打印原始行,如果只需要第二个字段,请使用:

sed -E 's/\S+/\n&\n/2;s/.*\n(.*)\n.*/\1/;/[-0-9]/d' file