Объединение определенных строк текста вместе перед их изменением

\< и \> соответствуют пустой строке в начале и конце слова соответственно и только символы, составляющие слово:

[[:alnum:]_]

Из man grep:

Word-constituent characters are letters, digits, and the underscore.

Итак, ваш Regex не работает, потому что / не является допустимым символом, составляющим слово.

Вместо этого, поскольку у вас есть пробелы, вы можете использовать -w опцию grep для поиска слова:

grep -wo '/media/fresh' /etc/fstab

Пример:

$ grep -wo '/media/fresh' <<< '/dev/sdb1       /media/fresh      ext2   defaults     0 0'
/media/fresh
1
08.02.2016, 06:22
2 ответа

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

sed -ne '/^[0-9][0-9]*\.[0-6]/ { N; s/\n/ /; s/^\([^,]*,[^,]*\),.*$/\1/; p; }' < data

Это обрабатывает файл с именем data , подавляя печать, если не требуется ( -n ) и выполнение программы sed в кавычках.

Эта программа выбирает строки, начинающиеся с одной или нескольких цифр, a . и цифра 0-6, а затем выполняет часть в {} для этих строк. Команда N также считывает следующую строку с новой строкой между ними. Первый s /// заменяет новую строку пробелом.

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

Последний p выводит в результирующую строку. Все остальные строки ввода игнорируются.

3
29.04.2021, 00:18

Альтернативное решение в AWK:

awk -v FS="," '/^[0-9]/{line=$0;getline; line=line" "$1", "$2 ;print line}' file
0
29.04.2021, 00:18

Теги

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