以下のように、キーワード「/」と「NET」の間のファイルからユーザー名を抽出したいと思います。これを行うにはどうすればよいですか?または同様のプログラムを使用awk
できますsed
かcut
?
から:
audit: command=true rsa1/[email protected] running
audit: command=true user2/[email protected] executing
到着する:
audit: command=true rsa1 running
audit: command=true user2 executing
答え1
使用sed
:
< inputfile sed 's/\/.*NET//' > outputfile
sed
ローカルで使用:
sed -i.bak 's/\/.*NET//' inputfile
コマンド#1失敗:
< inputfile
:コンテンツを「s」inputfile
にリダイレクトします。sed
stdin
> outputfile
sed
:コンテンツをstdout
次にリダイレクトします。outputfile
コマンド#2分割:
-i.bak
:sed
バックアップファイルを強制生成し、inputfile.bak
その場所で編集します。inputfile
inputfile
: 強制sed
読み取り入力inputfile
正規表現の分解:
s
: 置換を実行するためのアサーション/
: 検索モード開始\/
:/
文字と一致します。.*NET
NET
: 文字列が終了する前のすべての文字と一致します。/
:検索モードを停止/交換モードを開始/
: 交換モードの停止
出力例:
~/tmp$ cat inputfile
audit: command=true rsa1/[email protected] running
audit: command=true user2/[email protected] 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/[email protected] running
audit: command=true user2/[email protected] executing
~/tmp$ cat inputfile
audit: command=true rsa1 running
audit: command=true user2 executing
~/tmp$
答え2
次のことを試すこともできますawk
。
awk '{ split($3, a, "/"); $3 = a[1]; } 1' file