Использование регулярного выражения в скрипте bash - PullRequest
0 голосов
/ 11 декабря 2010

Я новичок в сценариях bash, но я хочу сделать следующее:

Я хочу обнаружить шаблон STRING_1 "STRING_2" в FILE_1 и добавить STRING_2 к FILE_2

.краткий способ сделать это?

Ответы [ 6 ]

1 голос
/ 11 декабря 2010
grep -Po '(?<=aaa ")([^"]*)(?=")' FILE_1 >> FILE_2
1 голос
/ 11 декабря 2010

Вы можете сделать что-то вроде:

   sed 's/STRING_1 \"(.*)\"/\1/g' FILE_1 >FILE_2

Что здесь происходит, sed ищет все между первым и вторым '/' из FILE_1 и отправляет то, что находится между вторым и третьим '/', вГруппы FILE_2.

() назначены на \ 1, \ 2 и т. Д., Поэтому все, что находится между ними, является вашим STRING_2.

1 голос
/ 11 декабря 2010

Ваш вопрос довольно расплывчатый;но я думаю, что вы хотели

, если STRING_1 существует в FILE_1, добавьте STRING_2 к FILE_2

answer=`grep -c STRING_1 FILE_1`
if [ "$answer" -gt 0 ] 
then
     echo "$STRING_2" >> FILE_2
fi
0 голосов
/ 11 декабря 2010

Вот что у меня сейчас есть:

sed 's / STRING_1 \ s *: \ s * "([^"] *) "/ \ 1 / g'" FILE_1 ">> FILE_2;

Я хочу, чтобы он обнаружил следующий шаблон в файле 1:

STRING_1   :   "STRING_2"

и сохранить STRING_2 в файл 2

но это не работает, он добавляет много случайных вещей в FILE_2 (которые не должны совпадать)

0 голосов
/ 11 декабря 2010

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

grep '^\s*STRING_1\s*\".*\"\s*$' FILE_1 | awk -F \" '{printf $2"\n"}' >> FILE_2

Он правильно обрабатывает несколько пустых символов входного файла и добавляет новую строку после STRING_2 в конце FILE_2.

0 голосов
/ 11 декабря 2010

Если я правильно понял вопрос, и поэтому у вас есть файл, содержащий:

word1a "word1b"
word2a "word2b"
word3a "word3b"

Вы можете использовать sed, чтобы извлечь значение, заключенное в кавычки, а затем перенаправить в файл

sed 's/.*"\(.*\)"/\1/' FILE_1 > FILE_2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...