Похоже, что этого можно достичь что вам нужно.
Если NR (номер строки) делится на 2, пометьте дополнительный символ новой строки в конце. А затем распечатайте строку.
$ awk 'NR%2==0{$0=$0"\n"}1' foo.txt
line1
line2
line3
line4
line5
$
Если это просто пустая строка между каждой строкой, используйте это
$ awk '{print $0,"\n"}' foo.txt
line1
line2
line3
line4
line5
$
Если вы хотите использовать регулярное выражение, вам нужно использовать соответствующие модификаторы и якоря, чтобы получить только желаемое соответствие (es ). В вашем случае шаблон Regex1.1.1.2
(.
означает, что любой одиночный символ BTW )будет соответствовать всем строкам, следовательно, результат. Последний из них awk '"^1.1.1.2$" {print NR}'
- это не то, как вы помещаете шаблон Regex в awk
--, вам нужно использовать либо //
, либо $<field> ~ <pattern>
.
Вот как можно получить желаемый результат:
Способ регулярного выражения :избежать всех .
, чтобы трактовать их буквально, добавить $
для соответствия концу:
awk '/1\.1\.1\.2$/ {print NR}' test.csv
Обработка строк :печать номера записи, если ,
, за которым следует любое горизонтальное разделенное пробелом последнее поле1.1.1.2
:
awk -F ',[[:blank:]]*' '$NF == "1.1.1.2" {print NR}' test.csv
ip=1.1.1.2; sed -ne "/,${ip//./\\.}\$/=" yourIPfile
Где мы избегаем точек .
и даем это команде sed =
, которая отобразит соответствующий номер строки.
Всегда можно попробовать старый добрыйgrep
:
grep -wFn 1.1.1.2 yourIPfile
или
ip=1.1.1.2 ; grep -wFn $ip yourIPfile
В обоих случаях вывод
1:node2,1.1.1.2