awk '
NR == 1 {print}
FNR == 1 {next}
{print}
' *.csv
Переменная NR
- это номер записи всего ввода.
Переменная FNR
- это номер записи только для текущего файла.
Это печатает первую строку, видимую awk (заголовок первого файла), затем пропускает первую строку каждого файла, печатая все остальные строки.
Если вы хотите заменить только первое совпадение, не используйте суффикс g
для команды:
$ echo 'aa' | sed 's/a/b/g'
bb
$ echo 'aa' | sed 's/a/b/'
ba
Параметр g
означает «глобальный», который явно указывает sed
заменить все совпадения, а не только первое (, что является поведением по умолчанию ).
g
в конце заставит sed
повторить подстановку столько раз, сколько возможно в строке. Вы только хотите сделать это дважды.
Давайте сделаем это с помощью GNUawk
:
echo 'abcdef12cade 12345678 abcdefba12345678' |
awk '{ sub("[0-9a-fA-F]{8}", "00000000", $1)
sub("[0-9a-fA-F]{8}", "00000000", $2)
print }'
Это выполняет замену только в двух первых полях, -разделенных пробелами, а затем печатает результирующую строку.
Похоже, вы ищете слова длиной от 8 до 15 символов и заменяете первые 8 шестнадцатеричных цифр:
sed -E 's/\<[[:xdigit:]]{8}([[:xdigit:]]{0,7})\>/00000000\1/g' <<END
abcdef12cade 12345678 abcdefba12345678 12345 123456789
END
00000000cade 00000000 abcdefba12345678 12345 000000009
Где \<
и \>
— границы слов, а [:xdigit:]
соответствует шестнадцатеричной цифре.