这是输出的样子,基本上是:
? RESTRequestParamObj.cpp
? plugins/dupfields2/_DupFields.cpp
? plugins/dupfields2/_DupFields.h
我需要从第二列获取文件名并将其传递给rm
。 AWK脚本就像awk '{print $2}'
,但我想知道是否有另一种解决方案。
答案 0 :(得分:3)
如果?
和文件名之间有空格,那么:
cut -c9-
如果他们是标签,那么:
cut -f2
答案 1 :(得分:1)
将您的输出放在文件
中$> cat ./text
? RESTRequestParamObj.cpp
? plugins/dupfields2/_DupFields.cpp
? plugins/dupfields2/_DupFields.h
使用sed编辑
$> cat ./text | sed -r -e 's/(\?[\ \t]*)(.*)/\2/g'
RESTRequestParamObj.cpp
plugins/dupfields2/_DupFields.cpp
plugins/dupfields2/_DupFields.h
这里的sed匹配2行 -
然后它只用第二部分改变整行。
答案 2 :(得分:0)
这可能对您有用:
echo "? RESTRequestParamObj.cpp" | sed -e 's/^\S\+/rm /' | sh
或使用GNU sed
echo "? RESTRequestParamObj.cpp"| sed -r 's/^\S+/rm /e'
答案 3 :(得分:0)
bash 唯一解决方案,假设您的输出来自stdin:
while read line; do echo ${line##* }; done
答案 4 :(得分:0)
使用cut / perl代替
cut -f2 -t'\t'|xargs rm -rf
<your output>|perl -ne '@cols = split /\t/; print $cols[1]'|xargs rm -rf