これからどのように取得しますか:
randomcollege-nt\user90
これに:
user90
sed
を使用していますか?
単純なgrep
を使用してuser90
を検索します。
$ echo "randomcollege-nt\user90" | grep -o user90
user90
User90が一定でない場合、次のコマンドを使用してください:
$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
最後にsed
を使用して、ファイルをその場で編集します。
$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file
または、考えられるすべてのユーザーアカウントを一致させるには:
$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
ほとんどの場合Windowsからのdomain\username
文字列からユーザー名を抽出するためにテキストを解析しています。上記の回答のほとんどは、特定のサンプル文字列のみを扱っています。
これを行う最良の方法は、sedで正規表現を使用して、\
の後に続くものをすべて抽出することです。方法は次のとおりです。
sed 's|.*\\\(.*\)|\1|'
これはバックスラッシュ(ここではエスケープしているので.*
)になるまですべて(\\
)に一致し、バックスラッシュ(.*
)の後はすべて一致しますが、グループをキャプチャします(つまり、括弧で囲みますが、エスケープする必要があるため、\(.*\)
)。これで、キャプチャグループとして文字列の\
の後に来るものがすべて得られたので、\1
で参照して印刷します。
上記のsed
コマンドは、必ずしもrandomcollege-nt
ではなく、任意のドメイン名で使用できます。
$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90
$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username
$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
別のsed
:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
またはPOSIXly:
$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
Sedを使用したいのは知っていますが、別のものを使用します...
echo "randomcollege-nt\user90" | cut -d'\' -f2
これが質問ですか?
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
文字列random college-ntが定数でない場合は、上/下のawkコマンドを使用してください。
むしろ、「awk」を使用して「user90」をフィルタリングします。
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
sed
を使用すると、特定の文字の前の文字列内のすべてを削除します(二重角括弧[特定の文字]に定義)。
echo "randomcollege-nt\user90" | sed 's/.*[\]//'
.*[\]
charの前のすべての(\
)文字を空白文字(//
)に置き換える手段
ファイルがあり、置換する場合は、sed
コマンドで-i
フラグを次のように使用します。
sed -i 's/.*[\]//' /path/to/FileName
元の質問ではsed
が要求されましたが、ここでは代替案が人気があることがわかります。
Bashを使用している場合、パラメーターの展開は最も簡単です。
Origin='randomcollege-nt\user90'
echo "${Origin#*\\}"
複数のバックスラッシュが予想される場合は、ハッシュ記号を2倍にします。
echo "${Origin##*\\}"
詳細については、man bash
およびParameter Expansion
を検索してください。
この単純なgrepコマンドは仕事をします、
$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
誰かがコメントアウト# server_tokens off;
をnginxから自動的に削除して、自動dev-opsを支援しようとしている場合:
Sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf
。
Ubuntu 16.04 LTSでnginx/1.12.1でテストおよび動作しています。サーバートークンをオフにしてNGINXをロックダウンするための関連する回答 here 。