Дискретность в аргументе командной строки против ввода файла - PullRequest
0 голосов
/ 15 марта 2020

Итак, у меня есть проект, который использует sed и bash, и я пытаюсь понять, почему в выходных данных командной строки он дает мне одно значение, тогда как в реальном проекте он дает мне другое значение.

В командной строке я выполняю

sed 's/||/ || /g' filename

, а в файле sed я ввожу

s/||/ || /g

Теперь первая команда в командной строке дает мне правильный вывод, но я Я пытаюсь понять, почему, когда я использую команду в файле SED, это не дает мне тот же вывод. В файле bash, который у меня есть, я вызываю файл sed как таковой

sed -rf sedFile $1

, а затем запускаю программу как

./bashfile.bash fileName

1 Ответ

1 голос
/ 15 марта 2020
sed 's/||/ || /g' filename

полностью отличается от

sed -rf sedFile filename

Последнее, по сути,

sed -r 's/||/ || /g' filename

, и это приведет к совершенно другим результатам, поскольку -r изменит значение | от буквально вертикальной черты до чередования. Таким образом, || в шаблоне поиска соответствует строке нулевой длины, или строке нулевой длины, или строке нулевой длины, что означает, что она будет соответствовать любой позиции (нулевой длины) между символами (в том числе до первого символа и после последний символ).

echo ,,,, | sed -r 's/||/_||_/g' # underscores for visibility in the output

имеет следующий вывод

_||_,_||_,_||_,_||_,_||_

Кстати, s/|/ || /g будет иметь такой же эффект, тогда как s// || /g недействителен.

...