Мне нужно найти значение в файле между> STRING <

Похоже, кэш библиотеки (/etc/ld.so.cache ) еще не был обновлен на клиенте. Проверьте вывод ldconfig -p при следующем возникновении проблемы.

-121--114134-

Я не знаю, квалифицируется ли это как "ответ", но это решило мою проблему. Редактируя мои/etc/hosts и заменяя открытый IP внутренним IP-адресом виртуальной машины, все начинает работать правильно. Я предполагаю, что это кругосветка через публичный IP, которая ломается, но я не совсем уверен.

-121--289378-

Я не уверен, что sed может выполнять сложные соответствия другим нескольким строкам.

С помощью perl remove all comments:

perl -e '$_=join("",<>);s%/\*.*?\*/%%gs;s%//.*$%%gm;print' SomeFile.java

С помощью perl remove all non-javadoc comments за пределами пар "":

perl -e '$_=join("",<>);s%/\*([^*].*?)?\*/%%gs;s%^([^\"\n\r]*(\"[^\"\n\r]*\"[^\"\n\r]*?)*?)//([^*\n\r].*)?$%$1%gm;print' SomeFile.java

Вот более компактная версия с поиском всех файлов * .java и генерацией файлов .bak:

 find . -name '*.java' -print0 | xargs -r -0 perl -n -p -0 -i.bak -e 's%/\*([^*].*?)?\*/%%gs;s%^([^\"\n\r]*(\"[^\"\n\r]*\"[^\"\n\r]*?)*?)//([^*\n\r].*)?$%$1%gm'

Но это приведет к удалению//inside/* * */

Чтобы избежать этого, потребуется более сложный сценарий:

Необходимо заменить/* * */на __temp_comment_ # (заменить # на изменяющийся номер)

, затем заменить ""... на __temp_quote_#

then удалить комментарий

, а затем вернуть __temp_quote_ # и __temp_comment_ # к исходному тексту

0
10.03.2019, 06:18
2 ответа

Если вы можете быть уверены, что в этой строке будет один открывающий тег и один закрывающий тег, вы можете использовать его в качестве разделителя полей дляawk:

awk -F "</*Iwanthis>" '(NF > 1){print $2}' yourfile

Это не поможет во многих искусственных случаях. Чтобы быть более строгим, вы можете использоватьsed:

sed -n 's_.*<Iwanthis>\(.*\)</Iwanthis>.*_\1_p' yourfile

-nподавляет вывод по умолчанию, поэтому вы просто получаете вывод в соответствующей строке. Я выбрал символ подчеркивания в качестве разделителя для команды s, чтобы не экранировать косую черту. Команда sзаменит всю строку частью между открывающим и закрывающим тегом (\1относится к части \(.*\))Конечно, вы все еще можете создавать странные случаи, чтобы это не сработало.

2
28.01.2020, 02:16

Конечно, похоже на XML-файл. Добавьте корневую заметку и используйте синтаксический анализатор XML :

.
$ { echo '<r>'; cat file; echo '</r>'; } | xmlstarlet sel -t -v //Iwanthis
6.1.0
3
28.01.2020, 02:16

Теги

Похожие вопросы