Короткийsedподход:
sed -En 's/^(.{2}).{17}(\S+).*/\1, \2/gp' test.dat
Выход:
50, Mike
50, Roy
Есть несколько отличий.
./scriptname
требует, чтобы файл с именем scriptname
был исполняемым, и использовал оболочку, указанную в первой строке (в «шебанге», например, #!/bin/sh
), если есть.
sh scriptname
работает до тех пор, пока файл с именем scriptname
доступен для чтения и использует sh
(что бы это ни было) независимо от того, что указывает shebang скрипта. В некоторых оболочках, если имя_сценария
не существует в текущем каталоге, будут выполняться поиски в каталогах, указанных в PATH
, и первое найденное там имя_сценария
(если any) будет прочитан и интерпретирован вместо этого.
Иными словами,
sh scriptname
будет работать без установки, но вы можете использовать не ту оболочку и запустить не тот скрипт.
./scriptname
попытается запустить правильный сценарий, используя правильную оболочку (или, по крайней мере, оболочку, указанную автором сценария, если таковая имеется), но сначала может потребоваться некоторая настройка (chmod a+x имя_сценария
).