Я пытаюсь выяснить, как заменить шаблон определенным числом раз, используя sed.
Я обнаружил, что sed с флагом g заменяет все вхождения, без 1 время, с указанным номером, замените это появление, g3 больше / равно 3.
Но как заменить шаблон из какого-либо раздела или меньше некоторого числа?
eg вход, одна строка содержит номер карты, и я хочу хэш-часть ее
1234 1234 1234 1234
1234 1234 1234 1234
1234 1234 1234 1234
1234 1234 1234 1234
Команды:
$ sed "s/[0-9]\\{4\\}/\\*\\*\\*\\*/g"
**** **** **** ****
$ sed "s/[0-9]\\{4\\}/\\*\\*\\*\\*/g3"
1234 1234 **** ****
$ sed "s/[0-9]\\{4\\}/\\*\\*\\*\\*/2"
**** 1234 **** ****
Я ищу способ заменить хешей конкретное появление шаблона например 1-3 или & lt; 3. Для большего появления шаблона в каждой строке может быть 5-10 или что-то еще
GNU sed. Да, эта опция позволяет заменить все g вхождения паттенов или из X-го события на все после этого gX, но вы можете использовать эти два расширения для достижения того, что вы хотите заменить только первый Y происходит, как показано ниже, чтобы заменить первые 3 места PATTERN.
sed -E 's/PATTERN/TEMP-REPLACE/g4; s/PATTERN/REPLACE/g; s/TEMP-REPLACE/PATYERN/g' infile.txt
Также как решение, отличное от GNU, вы можете иметь Y sed части, чтобы заменить Y раз PATTERN, как показано ниже,
sed -E -e 's/PATTERN/REPLACE/' -e 's/PATTERN/REPLACE/' -e 's/PATTERN/REPLACE/'
first
Вы можете использовать awk для этого с определением двух управляющих флагов для START и END и выполните следующие действия:
awk -v START=1 -v END=5 '{for (i=START;i<=END;i++) gsub(/PATTERN/,"****",$i)}1' infile.txt
please обратите внимание, что по умолчанию awk, рассматривая чтение файла, ограниченного вкладкой или пробелом, если ваш отличается или вы хотите рассказать awk, это, например, ,, вы можете установить его с опцией -F','.
GNU sed. Да, эта опция позволяет заменить все g вхождения паттенов или из X-го события на все после этого gX, но вы можете использовать эти два расширения для достижения того, что вы хотите заменить только первый Y происходит, как показано ниже, чтобы заменить первые 3 места PATTERN.
sed -E 's/PATTERN/TEMP-REPLACE/g4; s/PATTERN/REPLACE/g; s/TEMP-REPLACE/PATYERN/g' infile.txt
Также как решение, отличное от GNU, вы можете иметь Y sed части, чтобы заменить Y раз PATTERN, как показано ниже,
sed -E -e 's/PATTERN/REPLACE/' -e 's/PATTERN/REPLACE/' -e 's/PATTERN/REPLACE/'
first
Вы можете использовать awk для этого с определением двух управляющих флагов для START и END и выполните следующие действия:
awk -v START=1 -v END=5 '{for (i=START;i<=END;i++) gsub(/PATTERN/,"****",$i)}1' infile.txt
please обратите внимание, что по умолчанию awk, рассматривая чтение файла, ограниченного вкладкой или пробелом, если ваш отличается или вы хотите рассказать awk, это, например, ,, вы можете установить его с опцией -F','.
GNU sed. Да, эта опция позволяет заменить все g вхождения паттенов или из X-го события на все после этого gX, но вы можете использовать эти два расширения для достижения того, что вы хотите заменить только первый Y происходит, как показано ниже, чтобы заменить первые 3 места PATTERN.
sed -E 's/PATTERN/TEMP-REPLACE/g4; s/PATTERN/REPLACE/g; s/TEMP-REPLACE/PATYERN/g' infile.txt
Также как решение, отличное от GNU, вы можете иметь Y sed части, чтобы заменить Y раз PATTERN, как показано ниже,
sed -E -e 's/PATTERN/REPLACE/' -e 's/PATTERN/REPLACE/' -e 's/PATTERN/REPLACE/'
first
Вы можете использовать awk для этого с определением двух управляющих флагов для START и END и выполните следующие действия:
awk -v START=1 -v END=5 '{for (i=START;i<=END;i++) gsub(/PATTERN/,"****",$i)}1' infile.txt
please обратите внимание, что по умолчанию awk, рассматривая чтение файла, ограниченного вкладкой или пробелом, если ваш отличается или вы хотите рассказать awk, это, например, ,, вы можете установить его с опцией -F','.