команда для усечения строк в кавычках в файле? - PullRequest
2 голосов
/ 18 марта 2012

У меня есть файл, который содержит несколько строк:

revision="abcdabcdabcd0000111122223333"
revision="0000111122223333444455556666"

И я хочу обрезать строку в кавычках (например, до 8) следующим образом:

revision="abcdabcd"
revision="00001111"

Как я могу использовать sed / awk / perl для достижения этой цели?

Ответы [ 4 ]

3 голосов
/ 18 марта 2012

Всегда ли ключевое слово ревизия?Всегда ли информация в строке длиннее 8 символов?

Я думаю, что я смотрю на что-то вроде:

sed 's/^\([a-z]*\)="\([^"]\{1,8\}\)[^"]*"/\1="\2"/' input > output

Это ищет любое ключевое слово только в нижнем регистре (котороезапоминается) перед знаком равенства и двойной кавычкой, затем находит 1-8 символов не двойной кавычки (которые запоминаются), за которыми следуют ноль или более других не двойных кавычек и двойная кавычка;их заменяют ключевое слово, равно, двойная кавычка, запомненные не двойные кавычки и двойная кавычка.Если есть какой-либо конечный материал, он остается неизменным.

3 голосов
/ 18 марта 2012

Возможно:

sed -i 's/\(revision="........\)[^"]*"/\1"/' file
0 голосов
/ 18 марта 2012
perl -i~ -pe's/^revision="[^"]{0,8}\K[^"]+//' file
0 голосов
/ 18 марта 2012

Perl решение:

perl -pi.bak -we 's/^revision="[^\n"]{0,8}\K.*/"/' myfile.txt

Сохранит резервную копию в myfile.txt.bak.Удалите i.bak, чтобы увидеть результат без внесения изменений в файл.Удалите .bak, чтобы не сохранять резервную копию (необратимо).

Регулярное выражение найдет и изменит любую строку, начинающуюся с revision=".После этого совпадения будут сохранены следующие 0-8 символов, которые не являются двойными кавычками или символом новой строки (*), и будут удалены остальные.Он добавит двойную кавычку в конец строки перед новой строкой.

(*) Добавлена ​​новая строка, чтобы предотвратить случай с краем встроенных новых строк или плохо отформатированных строк, повреждающих файл.Это «исправит» открытые двойные кавычки, добавив закрывающие.

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