Проблема - это *
в средствах регулярных выражений 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
Тот последний использует получение шаблона, чтобы не печатать тот же шаблон дважды.
Без номера закрывающего поля с помощью -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