-1

Мне нужна команда Unix, которая будет принимать входные данные по конвейеру, отфильтровывать определенные строки и записывать остальные в стандартный вывод. Суть в том, что это должна быть однострочная команда, которая не зависит от того, что не поставляется из коробки в типичном дистрибутиве Linux.

Контекст заключается в том, что в нескольких тестовых файлах ссылки 'llvm-config --libs' не должны, и я должен устранить их, но мне нужно сделать это из файла configure.ac.

И дело в том, что это не один элемент в строке, это все элементы в одной строке, разделенные пробелами, а не символами новой строки.

1 ответ1

1

grep - довольно распространенная команда Unix/Linux, по крайней мере, мне еще не приходилось сталкиваться с какими-либо дистрибутивами, в которых мне приходилось специально устанавливать базовый grep (против, например, egrep или другой команды фильтра).

возьмите ввод по каналу, отфильтруйте определенные строки и запишите остальные в стандартный вывод.

Чтобы использовать его для фильтрации, вы можете сделать следующее (при условии, что вы используете cat для печати файла в стандартный вывод)

cat "some_file.txt" | grep -v "text to omit"

Кроме того, grep также работает с файлами, поэтому приведенную выше команду можно записать так:

grep -v "text to omit" "some_file.txt"

Флаг -v указывает grep печатать все, кроме указанного текста. Если вы хотите поиск с учетом регистра, вам нужно указать флаг -i .

это не один элемент в строке, это все элементы в одной строке, разделенные пробелами, а не символами новой строки.

Для этого вы можете добавить цикл for для перебора слов и при этом использовать grep для достижения того, что вам нужно, например:

for word in "hello there how" are you how "am i today"; do echo $word; done | grep -v "how"

Выход для этого будет:

are
you
am i today

И чтобы он выводился в одной строке, вы можете использовать команду tr для перевода \n в пробел:

for word in "hello there how" are you how "am i today"; do echo $word; done | grep -v how | tr '\n' ' '

Здесь вывод будет:

are you am i today 

Первая часть for word in - это сценарий оболочки for loop. Предоставленная ссылка специфична для BASH но синтаксис довольно похож среди других оболочек (по крайней мере, для CSH , KSH и ASH), поэтому вам, возможно, придется настроить синтаксис так, чтобы он соответствовал вашей конкретной оболочке.

Надеюсь, что это может помочь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .