Будет любой вести меня к grep только слова, содержащие шаблон _ARA от ниже единственной строки.
Строка:
LINK:['IM219MIR_ARA1','IM18Q4_ARA1','SM18Q4_ARA1','IM18PLANNING_ARA1','IM118Q4DYNVA_ARA1','IM218Q4DYNVA_ARA1','IM119EIOPALTG_ARA1','IM219EIOPALTG_ARA1','SM119EIOPALTG_ARA1']}
Ожидаемый вывод:
IM219MIR_ARA1
IM18Q4_ARA1
SM18Q4_ARA1
IM18PLANNING_ARA1
IM118Q4DYNVA_ARA1
IM218Q4DYNVA_ARA1
IM119EIOPALTG_ARA1
IM119EIOPALTG_ARA1
IM219EIOPALTG_ARA1
SM119EIOPALTG_ARA1
grep
принимает -o
распечатать только совпавший текст, на отдельных строках, даже если соответствия прибыли из той же строки. Это также принимает -w
вынудить регулярное выражение распознать все слово (или не соответствие вообще), где слово является максимальной последовательностью букв, цифр и символов нижнего подчеркивания. Таким образом, можно просто использовать:
grep -ow '\w*_ARA\w*'
В этом случае можно на самом деле опустить -w
опция, если Вы любите и получаете тот же результат, начиная с регулярного выражения здесь, явно соответствует только словесным символам \w
.
Это будет читать из стандартного входа, потому что нет никаких аргументов имени файла. Если текст, который Вы показали, находится в файле - говорят, названный input.txt
- затем Вы передали бы это как аргумент:
grep -ow '\w*_ARA\w*' input.txt
Это производит:
IM219MIR_ARA1
IM18Q4_ARA1
SM18Q4_ARA1
IM18PLANNING_ARA1
IM118Q4DYNVA_ARA1
IM218Q4DYNVA_ARA1
IM119EIOPALTG_ARA1
IM219EIOPALTG_ARA1
SM119EIOPALTG_ARA1
Технически, вывод это, продукты немного отличаются от того, что Вы показали в своем вопросе, потому что ожидаемый вывод Вы показали списки IM119EIOPALTG_ARA1
дважды, даже при том, что это появляется только однажды в тексте, Вы показали. Я предполагаю, что это - ошибка, и Вы на самом деле хотите ее только однажды.
Если Вы хотите использовать cut
и sed
команды, используйте это:
<test.txt cut -d'[' -f2 | cut -d']' -f1 | sed "s/,'/\\n/g" | sed 's/.$//' | cut -d\' -f2 | grep _ARA
Объяснение в 2 частях:
grep _ARA
нашел бы строки, которые должны быть фильтрованыcut -d'[' -f2
удалит символы перед Вашими словами, тем же для cut -d']' -f1
который удалил бы то, что послеsed "s/,'/\\n/g"
извлечет каждое слово в одной строке<test.txt
просто перенаправление для cut
и grep
командаПосле этого 4 предыдущих команды результат:
'IM219MIR_ARA1'
IM18Q4_ARA1'
SM18Q4_ARA1'
IM18PLANNING_ARA1'
IM118Q4DYNVA_ARA1'
IM218Q4DYNVA_ARA1'
IM119EIOPALTG_ARA1'
IM219EIOPALTG_ARA1'
SM119EIOPALTG_ARA1'
Так, для удаления '
в конце каждого слова добавляем мы
sed 's/.$//'
и для 1rst '
, мы используем
cut -d\' -f2
Таким образом, конечный результат:
IM219MIR_ARA1
IM18Q4_ARA1
SM18Q4_ARA1
IM18PLANNING_ARA1
IM118Q4DYNVA_ARA1
IM218Q4DYNVA_ARA1
IM119EIOPALTG_ARA1
IM219EIOPALTG_ARA1
SM119EIOPALTG_ARA1
Если Вы хотите больше деталей об этой команде, можно считать мое обсуждение с Eliah Kagan.