попробуйте настроить grep следующим образом:grep -Po '(?<= - )[^ ]*'
Думаю, это зависит от того, какая у вас система... -Po не работает на mac osx, но отлично работает на centos:
[rust@JBLGSMR001 ~]$ cat data.txt
2017-06-07-17:44:45.5903 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5904 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5905 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5906 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5907 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5908 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
2017-06-07-17:44:45.5909 tcp(6) - 192.168.80.12 58647 192.168.80.140 9999: 44 S [linux 2.2]
[rust@JBLGSMR001 ~]$ cat data.txt | grep -Po '(?<= - )[^ ]*' >> output.txt
[rust@JBLGSMR001 ~]$ cat output.txt
192.168.80.12
192.168.80.12
192.168.80.12
192.168.80.12
192.168.80.12
192.168.80.12
На самом деле вы не меняете владельца файла, а удаляете старый файл и создаете новый. Когда вы это сделаете, будет создан новый файл, принадлежащий uid создателя. Чтобы избежать этого, вы должны изменить файл на месте. Отредактируйте его с помощью текстового редактора, который сохраняет, перезаписывая исходный файл на месте. Или запустите свои команды sed с выводом во временный файл, а затем скопируйте временный файл поверх исходного файла.
Если вам нужно использовать sudo
для изменения файла, используйте его для переключения на нужного пользователя. Вам не нужно , чтобы переключиться на root, это просто значение по умолчанию. Итак, в вашем случае вы хотите сделать:
sudo -iu apache sed -i 's/old/new/g' archivos35.sh
Это запустит команду sed
от имени пользователя apache
.