Grep слово из файла в солярисе с помощью awk
Я на Oracle Solaris 10 и пытаюсь извлечь слово из XML-файла, используя комбинацию команды awk и cut. У меня есть ниже упомянутая строка в файле XML.
<Resource driverClassName="oracle.jdbc.OracleDriver" name="jdbc/LiferayPool" type="javax.sql.DataSource" username="PROD_LIFERAY" password="" url="jdbc:oracle:thin:@server02:1521:PROD0100 " maxActive="20" maxIdle="10" minIdle="3" maxWait="10000" initialSize="3" validationInterval="60000" testOnBorrow="true" validationQuery="select 1 from dual" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"/>
Я хочу построить команду awk, чтобы получить слово из позиции, в которой в приведенном выше примере показан PROD0100. Я ценю, если кто-то может помочь мне разобраться.
1 ответ
Как обычно с такой проблемой, есть много способов ее решить в Unix.
Awk сопоставляет шаблоны с действиями, поэтому вам понадобится что-то вроде
/PROD0100/ {
# your actions here on the matching line
}
По умолчанию awk разбивает каждую строку на поля, разделенные пробелами.
Так что если вы используете что-то вроде
gawk '/PROD0100/{ for (i=1;i<=NF;i=i+1) { if (match($i, ".*PROD0100.*") != 0) { print "matching word "$i } } }' test
(где test - это файл для чтения, содержащий строку), тогда вы должны получить
matching word url="jdbc:oracle:thin:@server02:1521:PROD0100
Однако для ввода, которое вы вводите, у вас могут быть некоторые проблемы, потому что перед закрывающей двойной кавычкой в слове, которое найдено, есть пробел.