【发布时间】:2014-08-01 20:16:36
【问题描述】:
我有一个这样的文件列表输出:
/path/F201405151800
/path/F201405151900
/path/F201405152000
/path/F201405152100
我将此输出通过管道传输到 sed 并使用以下语法:
sed -n '/F.\{8\}'$var1'/,/F.\{8\}'$var2'/p'
$var1 和 $var2 是用户输入,可以看出,它们指的是我的文件列表中一天中的几个小时。如果找到 $var1 和 $var2 值,上述语法就可以完美运行。但是如果 $var1 的值为 16,而 $var2 的值为 19,sed 将不会输出任何内容,因为在上述文件列表范围内找不到 16。
解决方案是:
sed -n '/F.\{8\}1[6-9]/p'
...这可行,但我现在面临的问题是如何指定两位数范围以包含以下内容:16-20。我尝试在单引号之间进行通配符(就像我正在使用变量一样),如下所示:
sed -n '/F.\{8\}'{16..21}'/p'
...但我得到的输出是:
sed: can't read /F.\{8\}16/p: No such file or directory
sed: can't read /F.\{8\}17/p: No such file or directory
sed: can't read /F.\{8\}18/p: No such file or directory
sed: can't read /F.\{8\}19/p: No such file or directory
sed: can't read /F.\{8\}20/p: No such file or directory
sed: can't read /F.\{8\}21/p: No such file or directory
我真的不需要使用 sed,我用 awk 探索了一些选项,但无法获得我想要的,主要问题是我不知道如何指定正则表达式 RS,以便我有时间阻止作为 awk 字段并执行一些条件,例如
'$2 > 16 && $2 < 21 {print}'
【问题讨论】: