我正在制作一个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
谢谢。
答案 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