сценарий оболочки для извлечения символов

Я хотел бы извлечь имя пользователя из файла между ключевыми словами «/» и «NET», как показано ниже. Как я могу сделать это с помощью таких программ, как awk , sed или cut .

из:

 audit: command=true rsa1/abc.domain.net@xyz.DOMAIN.NET running audit: command=true user2/xyz.domain.net@xyz.DOMAIN.NET executing 

чтобы:

 audit: command=true rsa1 running audit: command=true user2 executing 

Использование sed :

 < inputfile sed 's/\/.*NET//' > outputfile 

Использование sed на месте:

 sed -i.bak 's/\/.*NET//' inputfile 

Сбой командного # 1 :

  • < inputfile : перенаправляет содержимое inputfile на stdin sed
  • > outputfile : перенаправляет содержимое stdout sed в outputfile

Командная строка №2 :

  • -i.bak : inputfile.bak файл inputfile.bak и редактирует inputfile на месте
  • inputfile : inputfile sed для чтения ввода из входного inputfile

Распределение регулярных выражений :

  • s : утверждает, что выполняет замену
  • / : запуск шаблона поиска
  • \/ : соответствует символу a /
  • .*NET : соответствует любому количеству символов до конца строки NET
  • / : останавливает шаблон поиска / запускает шаблон замены
  • / : останавливает шаблон замены

Пример вывода:

 ~/tmp$ cat inputfile audit: command=true rsa1/abc.domain.net@xyz.DOMAIN.NET running audit: command=true user2/xyz.domain.net@xyz.DOMAIN.NET executing ~/tmp$ < inputfile sed 's/\/.*NET//' > outputfile ~/tmp$ cat outputfile audit: command=true rsa1 running audit: command=true user2 executing ~/tmp$ sed -i.bak 's/\/.*NET//' inputfile ~/tmp$ cat inputfile.bak audit: command=true rsa1/abc.domain.net@xyz.DOMAIN.NET running audit: command=true user2/xyz.domain.net@xyz.DOMAIN.NET executing ~/tmp$ cat inputfile audit: command=true rsa1 running audit: command=true user2 executing ~/tmp$ 

Вы также можете попробовать с awk :

 awk '{ split($3, a, "/"); $3 = a[1]; } 1' file