Как отфильтровать данные из табличного потока stdout в Bash? - PullRequest
2 голосов
/ 12 ноября 2011

Вот как выглядит вывод, в основном:

?       RESTRequestParamObj.cpp
?       plugins/dupfields2/_DupFields.cpp
?       plugins/dupfields2/_DupFields.h

Мне нужно получить имена файлов из второго столбца и передать их rm. Есть сценарий AWK, который выглядит как awk '{print $2}', но мне было интересно, есть ли другое решение.

Ответы [ 5 ]

3 голосов
/ 12 ноября 2011

Если между ? и именем файла есть пробелы, то:

cut -c9-

Если это вкладки, то:

cut -f2
1 голос
/ 12 ноября 2011

Поместил вывод в файл

$> 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 частям строки -

  1. ? с табуляцией или пробелами
  2. Другие символы до конца строки

И тогда он меняет всю строку только со второй частью.

0 голосов
/ 12 ноября 2011

используйте cut / perl вместо

cut -f2 -t'\t'|xargs rm -rf

<your output>|perl -ne '@cols = split /\t/; print $cols[1]'|xargs rm -rf
0 голосов
/ 12 ноября 2011

bash единственное решение, при условии, что ваш вывод получен из stdin:

while read line; do echo ${line##* }; done
0 голосов
/ 12 ноября 2011

Это может работать для вас:

 echo "?       RESTRequestParamObj.cpp" | sed -e 's/^\S\+/rm /' | sh

или с использованием GNU sed

 echo "?       RESTRequestParamObj.cpp"| sed -r 's/^\S+/rm /e'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...