
次の行を含むファイルがあります。
handleNewConnection:: User [email protected] has 2 active nodes
handleNewConnection:: User [email protected] has 2 active nodes
handleNewConnection:: User [email protected] has 2 active nodes
handleNewConnection:: User [email protected] has 2 active nodes
システムは「@」(選択した文字)を見つけて、「@」記号から逆方向に文字列を抽出する必要があります。ご存知のように、数字やアルファベット文字を含めることができ、長さは一定ではありません。
そして grep -o '[^"]@' /tmp/has2.txt
私は得る:
m@
2@
1@
g@
1)このようにして2番目のテキストファイルを取得できるかどうかを知っている人はいますか?
langfordm
bas102
bah001
mattleg
2)1)で生成された名前を他のプロセスの入力として単独で使用できるかどうかを知っている人はいますか?
答え1
grep
PCRE() と一緒に使用-P
:
$ grep -Po '.*\s\K[^@]+(?=@)' file.txt
langfordm
bas102
bah001
mattleg
またはGNUを使用してくださいsed
:
$ sed -r 's/.*\s([^@]+)@.*/\1/' file.txt
langfordm
bas102
bah001
mattleg
明らかに、次のプロセスが入力を受け取る方法に応じて、他のプロセスで結果を使用できます。これにより、配列を作成したり、結果を次のプロセスのSTDINに直接渡すことができます。
答え2
P
erl互換オプションを使用するのは非常に簡単です。
grep -Po '\w+(?=@)' file
これは\w
すべての単語文字と一致するため(?=...)
呼び出されます。視野正規表現。
出力:
langfordm
bas102
bah001
mattleg
答え3
いくつかの方法があります。最も簡単な方法は、正規表現パターンマッチングを使用することです。
grep -io '[a-z0-9_.]*@[a-z0-9_.]*'
これは、以下を含む最も長い文字列と一致し、印刷されます。
- または、
*
範囲内で大文字と小文字を区別しないゼロ個以上の文字()a-z
0-9
_
.
- まさに一つ
@
- または、
*
範囲内で大文字と小文字を区別しないゼロ個以上の文字()a-z
0-9
_
.
その後、@domain
部品を取り外します
cut -d@ -f1
だから完全な行は
grep -io '[a-z0-9_.]*@[a-z0-9_.]*' /tmp/file.txt | cut -d@ -f1
代替方法は、grep
パターンのユーザー名部分をワンステップで印刷できるLookahead PCREを使用することです。これは正しく理解するのが難しいですが、上記の例ではusername@domain
必要ありません。cut
grep -Pio '\S+(?=@\S+)'
これは意味する
- 1つ以上の(
+
)空白以外の文字(\S
)と一致します。 - パターン
@
と1つ以上の(+
)スペース以外の文字(\S
)が続きます。
答え4
すべてのバージョンでデフォルトのsed
正規表現を使用してください。
sed -e 's/.* \([^@]\+\)@.*/\1/' /tmp/has2.txt
2番目の質問は次のとおりです。いつも次の場合は、入力、抽出、または生成されたデータを何らかの方法で他のプロセスへの入力として使用します。
sed
他のプロセスで使用できる形式です(または、、、および/awk
またはperl
他の一般的なツールを使用して形式に変換できます)。他のプロセスは標準入力または1つ以上のファイルから入力を受け取ることができます。つまり、特定の場所にある1つの特定のファイルからのみ入力を受け取るようにハードコードされていません。そのような場合でも、特定のファイルを作成/上書きする場合、これにはデータが含まれており、引き続き機能します。
これがUnixとガジェットのアプローチの利点です。これは、データ中心の方法(カスタムツールを含む)を選択して、目的のツールを使用して目的の操作を実行できるデータ中心の方法として考えることをお勧めします。アプリケーション中心のアプローチ(データは魔法のブラックボックスアプリケーションに属し、特定のアプリケーションを介してのみデータを操作または対話できます)。
同様に重要なのは、アプリケーション開発者を含む開発者が同様のデータ中心の方法で考えるよう奨励することです。アプリ開発者がアプリからユーザーデータをロックして要件を妨げようとすると、ユーザーはそれをバグと権利侵害と見なします。