конкатенировать строку до конца каждой строки вывода в bash / csh - PullRequest
9 голосов
/ 08 февраля 2011

В командной строке bash, если я запускаю "find. -Name 'abc *'", он выводит список имен файлов, например

abc1
abc2
abc3

Как я могу передать его с помощью echo или другой командытак что я получаю этот вывод:

abc1   ok
abc2   ok
abc3   ok

Ответы [ 9 ]

11 голосов
/ 08 февраля 2011
find . -name 'abc*' | sed 's/$/\tok/' | column -t

sed добавляет строку <Tab>ok к каждой строке и column хорошо форматирует вывод (вы можете просто пропустить это, если вам это не нужно).

10 голосов
/ 08 февраля 2011

Я склонен писать:

whatever | while read line; do echo $line ok; done

Это может быть излишним для чего-то такого простого, но это становится самым простым делом, если вы хотите делать более сложные вещи со строкой.И это не предполагает запоминания того, как заставить sed работать!

6 голосов
/ 08 февраля 2011

С GNU найти,

find . -name "abc*" -printf "%f ok\n"
5 голосов
/ 08 февраля 2011

Просто:

$ find . -name 'abc*' | xargs -I {} echo {} OK
4 голосов
/ 08 февраля 2011

Труба через седь, это один из способов:

 | sed -e 's/\(^.*\)/\1   ok/'
2 голосов
/ 08 февраля 2011

Вы можете использовать xargs:

find -iname "abc" | xargs -IREPL echo REPL ok
0 голосов
/ 08 декабря 2015
find . -name 'abc*' -exec echo {}' OK' \; | column -t
0 голосов
/ 08 февраля 2011

Используйте что-то вроде этого:

find . -name "abc*" -exec echo "{} - ok" \;
0 голосов
/ 08 февраля 2011

Посмотрите на стандартную команду paste.Или для каждого элемента того, что find заставит вас вручную отобразить имя файла и результат функции с этим именем.

Не могли бы вы сказать, что вы, наконец, хотите сделать?

...