используя sed с регулярным выражением - PullRequest
1 голос
/ 11 декабря 2010

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

STRING_1   :   "STRING_2"

и добавьте STRING_2 к FILE_2

Это то, что у меня сейчас:

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

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

Ответы [ 4 ]

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

Немного риска ответить изменением спецификации вопроса, но ...

perl -ne 'print "$1\n" if ( /.*STRING_1\s*:\s*\"([^"]*)\".*/)' FILE_1 >> FILE_2

работает нормально

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

Если есть текст до STRING_1 и после STRING_2, он не будет удален с вашим текущим регулярным выражением и, следовательно, будет добавлен к FILE_2.

Чтобы исправить это добавление .*в начале и в конце вашего текущего шаблона как:

sed 's/.*STRING_1\s*:\s*"\([^"]*\)".*/\1/g' FILE_1 >> FILE_2;
       ^^                          ^^
0 голосов
/ 21 мая 2012

Используйте sed -n, если вы не хотите, чтобы sed выводил каждую строку по умолчанию, и модификатор p для печати результата совпадения.

sed -n -e 's/foo/bar/gp' FILE_1 >> FILE_2
0 голосов
/ 11 декабря 2010

изменил его на:

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

, но он все равно добавляет весь файл вместо соответствия регулярному выражению

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...