Есть хороший способ скопировать столбцы текста из файла с помощью регулярных выражений в мой монтажный картон?
В настоящее время решение, которое у меня есть, довольно уродливо и довольно похоже на спагетти-код... есть хороший способ сделать это с помощью "стандартного" инструмента, такого как ack
?
Сейчас у меня есть файл в следующем формате:
crap.txt:
IdentifierA Some Text
IdentifierB Some Other
Вот как я сейчас понимаю:
cat crap.txt |
ack (?<=IdentifierA ).+ |
awk '{ print $(NF-1), $NF }' |
pbcopy
Это даст Some Text
в вашем картоне.
Вместо того, чтобы просто иметь ack
отобразить строку, соответствующую регулярному выражению, а затем получить последние два столбца этой строки с помощью awk
Могу ли я получить конкретное совпадение с регулярным выражением для вывода на консоль? Я пытался с помощью grep -o
но это, кажется, не имеет позитивного взгляда...
2 ответа
Некоторым нравится это:
awk '/IdentifierA/ { print $(NF-1),$NF}' crap.txt
Some Text
Этот поиск для IdentifierA
и распечатать два последних из этой строки.
awk -F'IdentifierA\\s*' '$0=$2' file
эта строка выберет весь текст после вашего IdentifierA
(с удаленными начальными пробелами / табуляцией) независимо от того, сколько пробелов у вас есть в целевой части. это означает, что вам не нужно print $(NF-n), $(NF-n-1)...
или если текст имеет TAB
вместо space
Например, в этом случае:
IdentifierA a b c d e f g h i j k l
тестовое задание:
kent$ echo "IdentifierA Some Text
IdentifierB Some Other"|awk -F'IdentifierA\\s*' '$0=$2'
Some Text
kent$ echo "IdentifierA a b c d e f g h i j k l"|awk -F'IdentifierA\\s*' '$0=$2'
a b c d e f g h i j k l
Кстати, grep - очень удобный инструмент, если вы хотите извлечь текст:
kent$ echo "IdentifierA a b c d e f g h i j k l"|grep -oP 'IdentifierA\s*\K.*'
a b c d e f g h i j k l