Замените шаблон определенным количеством раз в строке, используя sed

Я пытаюсь выяснить, как заменить шаблон определенным числом раз, используя 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 или что-то еще

3
задан 9 August 2017 в 08:53

3 ответа

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','.

4
ответ дан 22 May 2018 в 19:52

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','.

4
ответ дан 18 July 2018 в 09:09

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','.

4
ответ дан 24 July 2018 в 19:15

Другие вопросы по тегам:

Похожие вопросы: