cat файл для отображения первой строки и запрошенного значения grep

Новая строка так же допустима, как и любой другой символ в имени файла в Unix. Для оболочки этот символ имеет особое значение (, он разделяет команды ), поэтому его необходимо заключать в кавычки, как и любые другие специальные символы (, такие как пробел, ;, |... ).

В Bourne -, как и в оболочках, это можно сделать с помощью одинарных или двойных кавычек:

ls -d 'a
b'

Или:

ls -d "a
b"

Некоторые оболочки (ksh93, zsh, bash, mksh, FreeBSD shкак минимум )также поддерживают:

ls -d $'a\nb'

Для scpобратите внимание, что имя файла передается в оболочку входа удаленного пользователя. Когда вы делаете:

scp file user@host:something

это приводит к вызову оболочки входа пользователя в hostдля интерпретации:

scp -t something

командная строка (по крайней мере с openssh ). Итак, если эта оболочка похожа на Борна -,это должно быть:

scp 'src/a
b' user@host:"dest/'a
b'"

Если да:

scp 'a
b' user@host:dest/

или

scp -r src user@host:dest/

sshd на сервере работает:

scp -t dest/

или

scp -r -t dest/

И имена файлов не передаются в командной строке удаленной оболочки, а встраиваются в поток данных между клиентом и сервером scp. Однако я обнаружил (с openssh 7.2p2 по крайней мере ), что символ новой строки в конечном итоге преобразуется в\^J(3 символа ).

Таким образом, вы можете использовать другой механизм вместо ssh, который обеспечивает более надежную передачу файлов, например rsync, sftp, или tar:

.
tar cf - src | gzip | ssh user@host 'cd dest && gunzip | tar xpf -'

Это также позволит лучше сохранять жесткие ссылки, программные ссылки и другие атрибуты файлов. Вам также может понадобиться рассмотреть преобразование кодировки, если имена файлов содержат символы, отличные от -ASCII.

1
17.08.2018, 20:52
4 ответа

Если вы можете вместо этого использовать sed, вы можете напечатать строку 1 и любую строку, которая соответствует, например

sed -n -e '1p;/23154688789/p' file.txt

-nскажет не печатать вывод, если не указано, 1pговорит печатать строку 1 и /23154688789/pпечатает любую строку, которая соответствует этому шаблону

2
27.01.2020, 23:18

В коде замените '|' с участием ';' head дает вам первую строку, и передача ее в grep делает поиск grep только в первой строке. Вам нужно что-то вроде этого:

head -n 1 file.txt ; grep 23154688789 file.txt
1
27.01.2020, 23:18

Предполагая, что единственная строка , начинающаяся с «NTL», будет строкой заголовка, для достижения этого можно использовать один grep.

$ grep -E '^NTL|23154688789' file.txt
NTL|OPC|RN1|CNL|NUE|NUF|TPB|EIP
23154688789 |4013|55115|11529|163624D585 |16D7620595 |1|...
$
0
27.01.2020, 23:18

Команда awkпозволяет это сделать. Здесь мы выводим строку, если номер записи(NR)равен 1 или мы получаем совпадение в первом поле:

awk -v id=23154688789 'NR==1 || $1==id'

Результат

NTL|OPC|RN1|CNL|NUE|NUF|TPB|EIP
23154688789       |4013|55115|11529|163624D585        |16D7620595        |1|
1
27.01.2020, 23:18

Теги

Похожие вопросы