Неправильный порядок с командой сортировки

Проблема - это * в средствах регулярных выражений 0 or more of the preceeding character, это не означает литерал *. Для соответствия a *, необходимо выйти из него. Например:

sed -i "s:'dbs_password' => 'a8b\*cyP0',:'dbs_password' => 'password-here':" test.php

Это напрасно сложно как бы то ни было. Если Вы хотите заменить все случаи строки a8b*cyP0 с password-here, можно просто сделать:

sed -i "s:a8b\*cyP0:password-here:" test.php

Если Вы хотите заменить только те строки то соответствие dbs_password, сделайте:

sed -i "s:\(.*dbs_password.*\)'a8b\*cyP0':\1'password-here':" test.php

Тот последний использует получение шаблона, чтобы не печатать тот же шаблон дважды.

3
04.09.2015, 16:36
1 ответ

Без номера закрывающего поля с помощью -k он будет рассматривать все поля, начиная с 1. Вам необходимо:

sort -k1,1 -t'|' file.txt

Тест:

$ sort -k1,1 -t'|' file.txt 
axis-AXIS|OK
axis-AXIS1RX|OK
axis-AXISA|OK
axis-AXISD|OK
axis-AXISD1|OK
axis-AXISD2|FALSE
axis-AXISD2X|OK
axis-AXISE|OK
axis-AXISM|FALSE
axis-AXISMD|FALSE
axis-AXISR|OK
axis-AXISR1M|OK

Если ваш локаль не C , вы можете установить его на лету:

LC_ALL=C sort -k1,1 -t'|' file.txt
5
27.01.2020, 21:16

Теги

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