Как фильтровать данные из табличного потока stdout в Bash?

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

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

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

2
Как любопытство, grep -o '[] [^] * $' будет содержать пробел перед каждым именем файла, но если у вас есть имена файлов без пробелов, это может быть приемлемым для перехода на гт .
добавлено автор tripleee, источник

5 ответы

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

cut -c9-

Если они табуляции, то:

cut -f2
3
добавлено

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

$> 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

Сед здесь соответствует двум частям линии -

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

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

1
добавлено

вместо этого использовать cut/perl

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

|perl -ne '@cols = split /\t/; print $cols[1]'|xargs rm -rf
0
добавлено

bash only solution, assuming your output comes from stdin:

while read line; do echo ${line##* }; done
0
добавлено
... и предполагая, что у вас нет имен файлов с пробелами. Чтобы заблокировать только первый символ, попробуйте $ {line #?} . (Это шаблон шаблона, а не буквальный знак вопроса, добавьте обратную косую черту спереди, чтобы удалить только вопросительные знаки.)
добавлено автор tripleee, источник

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

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

или с помощью GNU sed

 echo "?       RESTRequestParamObj.cpp"| sed -r 's/^\S+/rm /e'
0
добавлено
Linux Help
Linux Help
2 686 участник(ов)

Правила: https://telegra.ph/Pravila-Linux-Help-10-15

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

Linux Gaming RUS
Linux Gaming RUS
28 участник(ов)

Русскоязычный чатик, посвящённый играм на различных дистрибутивах Linux, а также wine, proton Arch Linux RU @ArchLinuxChatRU Gnome RU @gnome_ru