下面是輸出的樣子,基本上是:如何從Bash中的表格化輸出流中過濾數據?
? RESTRequestParamObj.cpp
? plugins/dupfields2/_DupFields.cpp
? plugins/dupfields2/_DupFields.h
我需要從第二列中獲取文件名並傳遞給rm
。有一個像awk '{print $2}'
一樣的AWK腳本,但我想知道是否有另一種解決方案。
下面是輸出的樣子,基本上是:如何從Bash中的表格化輸出流中過濾數據?
? RESTRequestParamObj.cpp
? plugins/dupfields2/_DupFields.cpp
? plugins/dupfields2/_DupFields.h
我需要從第二列中獲取文件名並傳遞給rm
。有一個像awk '{print $2}'
一樣的AWK腳本,但我想知道是否有另一種解決方案。
如果你有?
,然後將文件名之間的空格:
cut -c9-
如果他們的標籤,那麼:
cut -f2
放置在您的輸出文件
$> 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
桑達在這裏是匹配2份線 -
然後它改變了整條生產線只與第二部分。
這可能會爲你工作:
echo "? RESTRequestParamObj.cpp" | sed -e 's/^\S\+/rm /' | sh
,或者使用GNU sed的
echo "? RESTRequestParamObj.cpp"| sed -r 's/^\S+/rm /e'
慶典唯一的解決方案,假設你的輸出是來自標準輸入:
while read line; do echo ${line##* }; done
...並假設您沒有帶空格的文件名。要刪除第一個字符,請嘗試'$ {line#?}'。 (這是通配符,不是字面問號;在前面添加反斜槓以僅刪除問號。) – tripleee
使用剪切/ perl代替
cut -f2 -t'\t'|xargs rm -rf
<your output>|perl -ne '@cols = split /\t/; print $cols[1]'|xargs rm -rf
作爲一種好奇心,'grep -o'[] [^] * $''將在每個文件名前保留一個空格,但是如果您的文件名不含空格,那麼傳遞給'rm' 。 – tripleee