sedを使用して文字列の最初の部分を削除します


14

これからどのように取得しますか:

randomcollege-nt\user90

これに:

user90

を使用してsed


2
役に立つヒント:コマンドが何をするのかわからない場合は、入力するman the_command_nameとコマンドの役立つ説明が表示されます。また、www.google.comにアクセスして「command_name tutorial」と入力すると、多くのステップバイサイドガイドが見つかります。
DBedrenko 14

2
sed訪問に関するチュートリアルについては、grymoire.com
Pandya

回答:


15

私は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

面白いことは、私がそれを試したが、何も返されなかったことです。それが重要な場合、12.04を使用しています。grep -F文字列全体を表示した場合にのみ表示されます。
Roboman1723

@ Roboman1723は12.04でテストされ、私の最初のコマンドは動作します。どこかにgrepエイリアスが定義されていないことを確認してください。ところで、sedとのインライン置換を探しているように見えるので、このようなコマンドを追加しました。
シルヴァンピノー14

そのsedコマンドですべての "randomcollege-nt \"をカットし、ユーザー90以上を表示する方法はありますか?例:randomcollege-nt \ user90 randomcollege-nt \ user91 randomcollege-nt \ user92出力:user90 user91 user92
Roboman1723

1
@ Roboman1723元のファイルと目的の出力を質問に添付して、誰でも喜んでそれを確認できるようにする必要があります。
シルヴァンピノー14

1
@SylvainPineau最初のコマンドは適切ではないと思います。
アビナッシュラジ14

19

domain\username文字列からユーザー名を抽出するためにテキストを解析していますが、これはおそらくWindowsからのものです。上記の回答のほとんどは、特定のサンプル文字列のみを扱っています。

これを行う最良の方法は、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


9

sedを使用したいのは知っていますが、別のものを使用します...

echo "randomcollege-nt\user90" | cut -d'\' -f2

1
ツールの使用方法を知ることは、使用するツールを知ること同じくらい重要です。
ラファウチェーラク14

5

これが質問ですか?

$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90

刺すrandomcollege-ntが定数でない場合は、上記または下記のawkコマンドを使用してください。


1
実行すると、取得でき/user90ませんuser90
Roboman1723 14

2
いいえ、大丈夫です、私はuser90を得ました。
saptarshi NAG

3

むしろ、「awk」を使用して「user90」をフィルタリングします。

echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}

彼らはファイルを所定の場所で編集するためのawkの方法であり、新しいファイルに出力する必要はありませんか?
Roboman1723


はい、awkに-fオプションを使用する必要があります。詳細については、manページを参照してください。
saptarshi nag 14


1


sed特定の文字の前に文字列の削除すべて(ダブルブラケット[特定の文字]に定義)。

echo "randomcollege-nt\user90" | sed 's/.*[\]//'

.*[\]文字の前のすべての()文字\を空白文字(//)に置き換える手段

ファイルがあり、置き換えたい場合は、次のようなコマンドで-iフラグを使用しますsed

sed -i 's/.*[\]//' /path/to/FileName

1

元の質問はを求めていましたがsed、ここでは代替案が人気があることがわかります。

Bashを使用している場合、パラメーターの展開は最も簡単です。

ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"

複数のバックスラッシュが予想される場合は、ハッシュ記号を2倍にします。

echo "${ORIGIN##*\\}"

詳細については、man bashを検索してくださいParameter Expansion


0

# server_tokens off;自動dev-opsを支援するために、誰かがnginxからコメントアウトを自動的に削除しようとしている場合:

sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf

Ubuntu 16.04 LTSでnginx / 1.12.1でテストおよび動作しています。ここでサーバートークンをオフにすることでNGINXをロックダウンするための関連する回答。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.