\<
и \>
соответствуют пустой строке в начале и конце слова соответственно и только символы, составляющие слово:
[[: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
Вы можете использовать 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
выводит в результирующую строку. Все остальные строки ввода игнорируются.
Альтернативное решение в AWK:
awk -v FS="," '/^[0-9]/{line=$0;getline; line=line" "$1", "$2 ;print line}' file