Как напечатать первые два поля в файле?

La ​​canalización de la salida a mailno es correcta. Está redirigiendo la salida a un archivo, por lo que no se enviará nada a la canalización. Y cuando usa una tubería, los dos comandos se ejecutan simultáneamente, por lo que mailno espera a que termine el primer comando.

Ejecútelos secuencialmente con ;.

Y touchno produce ningún resultado. Si desea un mensaje que registre que el trabajo cron se realizó correctamente, debe escribirlo explícitamente.

50 * * * * root if touch /home/text_created; then echo "Touch successful"; else echo "Touch failed"; fi >> /home/log_crontab.txt 2>&1; mail -s "Email Subject" -a "/home/log_contab.txt" this_is_my_email
-1
29.05.2019, 12:56
3 ответа

попробуйте с:

grep -o '^[^+]*+[0-9]\+' infile

[^+]*+соответствует всем, пока не будет найдено первое +, за которым следует еще одна -или -цифра[0-9]\+

4
28.04.2021, 23:33

Командная строка:

$ perl -lne 'print /^(.*?\+\d+)/' input.txt

Это даст вам нужную информацию из ввода.

Рабочий:

  • /^(.*?\+\d+)/Регулярное выражение должно извлекать все до первого вхождения символа плюс, за которым следует по крайней мере один символ цифры.
  • Поскольку это связано с BOLчерез символ вставки ^, очевидно, что может произойти только одно совпадение.
  • Соответствие передается функции print.
  • Опции
  • -lneпредназначены для запуска Perlкода, указанного в опции -e, в каждой строке входного файла. -nзаставляет perl ничего не печатать, если об этом специально не попросят.

Выход:

United Kingdom   +44
United States Virgin Islands +1
1
28.04.2021, 23:33

Поскольку вы говорите, чтопробел является разделителем, используемым в вашем файле, вы должны иметь возможность использовать

cut -d ' ' -f 1-5 filename

для извлечения пяти первых столбцов из файла.

Для заданных данных это дает

United Kingdom   +44
United States Virgin Islands +1

... но я предполагаю, что это только случайность, так как страна с более чем двумя словами в названии будет охватывать несколько полей (, а не только два ).

Более надежный метод с использованием sedдля удаления всего после первого набора цифр в каждой строке (, т. е. всего после кода страны):

sed 's/\([[:digit:]][[:digit:]]*\).*/\1/' filename

или,

sed 's/\([[:digit:]]\{1,\}\).*/\1/' filename

или, с -Eи расширенным регулярным выражением,

sed -E 's/([[:digit:]]+).*/\1/' filename
1
28.04.2021, 23:33

Теги

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