sed: поиск и замена строки с номером строки - PullRequest
1 голос
/ 11 мая 2010

У меня есть XML-файл с множеством пустых атрибутов тега. Например:

<mytag id="">
  <ontent>aaa</content>
</mytag>
<mytag id="">
  <ontent>bbb</content>
</mytag>
<mytag id="">
  <ontent>ccc</content>
</mytag>

Теперь я хочу заменить id = "" на, например, id = "2443" (id = "[linenumber]")

Я пытался сделать это с помощью sed, но не получил успешного результата.

Я надеюсь, что кто-то здесь может мне помочь: -)

Ответы [ 3 ]

2 голосов
/ 11 мая 2010

Если вы хотите заменить пустой id="" на id="l", где l - номер строки, в которой найден mytag, вы можете сделать:

Edit:

Основано на комментариях:

perl -pe '$i++; s{id=""}{id="$i"}' < file.xml
1 голос
/ 11 мая 2010

Если вы можете гарантировать, что ваш XML - который может иметь произвольную форму - находится в точной форме, которую вы написали, awk или perl могли бы выполнять работу намного проще, чем sed. У Unicornaddict было что-то, что сработало бы, но я бы был немного осторожнее в строке замещения:

perl -pe '$i++; s{id=""}{id="$i"} if /^<mytag id="">/' filename.xml

Если вы не можете гарантировать, что XML не имеет произвольной формы, вам действительно нужно проанализировать его с помощью правильного синтаксического анализатора XML. Обобщенный XML не может быть проанализирован с помощью регулярных выражений.

0 голосов
/ 11 мая 2010

Вы можете попробовать вместо awk.Номер строки сохраняется в переменной NR.

...