cut
コマンドでスペースを区切り文字として使用したいのですが。
これにはどのような構文を使用できますか?
cut -d ' ' -f 2
ここで、2は必要なスペース区切りフィールドのフィールド番号です。
通常、スペースを区切り文字として使用する場合は、複数のスペースを1つとして扱う必要があります。これは、コマンドの出力を解析して、いくつかの列をスペースに揃えます。 (そしてそれに対するグーグル検索がここに私を導く)
この場合、1つのcut
コマンドでは不十分であり、次のものを使用する必要があります。
tr -s ' ' | cut -d ' ' -f 2
または
awk '{print $2}'
あなたも言うことができます
cut -d\ -f 2
円記号の後に2つのスペースがあることに注意してください。
データに複数のスペースがある場合、cutでは簡単にはできません。処理を簡単にするために入力を正規化すると便利です。 1つのトリックは、以下のように正規化にsedを使用することです。
echo -e "foor\t \t bar" | sed 's:\s\+:\t:g' | cut -f2 #bar
scut 、どんなPerlの正規表現でも破るトークンとして使える、カット風のユーティリティ(よりスマートだが遅い)。空白で区切るのがデフォルトですが、複数文字の正規表現、代替の正規表現などで区切ることもできます。
scut -f='6 2 8 7' < input.file > output.file
そのため、上記のコマンドは空白の列を分割し、(0から始まる)列6 2 8 7をこの順序で抽出します。
私はsed
name__、正規表現、キャプチャグループを含む答え(やや紛らわしい答えを認める)を持っています。
\S*
- 最初のWord\s*
- 区切り文字(\S*)
- 2番目のWord - キャプチャー.*
- 行の残りの部分sed
name__式として、キャプチャグループ、すなわち\(
および\)
をエスケープする必要があります。
\1
は、キャプチャされたグループ、つまり2番目のWordのコピーを返します。
$ echo "alpha beta gamma delta" | sed 's/\S*\s*\(\S*\).*/\1/'
beta
あなたがこの答えを見たとき、それはやや混乱しています、そして、あなたは考えるかもしれませんが、なぜ気になりませんか?まあ、私はいくつかのことを願っています、 "ああ!"そしてこのパターンを使用して、単一のsed
name__式で複雑なテキスト抽出の問題を解決します。