Если цель состоит в том, чтобы создать перекрестное произведение слов в a
со словами в b
, вы можете использовать join
следующим образом:
$ join -1 2 -2 2 a b
1 a
1 b
1 c
1 d
1 e
2 a
2 b
2 c
2 d
2 e
3 a
3 b
3 c
3 d
3 e
4 a
4 b
4 c
4 d
4 e
5 a
5 b
5 c
5 d
5 e
6 a
6 b
6 c
6 d
6 e
7 a
7 b
7 c
7 d
7 e
8 a
8 b
8 c
8 d
8 e
9 a
9 b
9 c
9 d
9 e
Объединение файлов в несуществующем -поле создаст все возможные комбинации строк в двух файлах. Обратите внимание, что это вставляет пробел в начале каждой строки.
$ awk '1; gsub(/é/,"e")' file
éva
eva
test
frédéric
frederic
Вышеупомянутое использование:
1
, заставляющее awk выполнять действие по умолчанию для печати текущей строки, затем:gsub()
заменить любые é
на e
, и если это нашло/заменило какие-либо é
, то положительный возврат, используемый в контексте условия, снова заставляет awk выполнять действие по умолчанию для печати текущего (теперь изменена строка ). Обратите внимание, что использование кода возврата из gsub()
, чтобы сообщить нам, были ли найдены какие-либо é
, избавляет нас от избыточного указания одного и того же регулярного выражения /é/
дважды в команде.
Еще один вариант, похожий на @Stephen Kitt:
$ sed '/é/p;s/é/e/g'
éva
eva
test
frédéric
frederic
/é/p
выберите строки с символом é
и напечатайте. s/é/e/g
вывести предыдущие строки с заменой.