区切り文字を変更するgrep


12

grepを使用する区切り文字を変更できる方法はありますか?

デフォルトでは、grepは\n区切り文字として使用すると思います。


これは、SuperUser.comに適しているようです
Mitch Dempsey

manページを読んで、そのようなオプションがあるかどうかを確認してください(いいえ、あるとは思いません)。
Cascabel

もう読んだ。いいえ、オプションはありません

@jhon:次に、grepを変更する方法を尋ねるのではなく、他の目的で何をしたいかを尋ねます。たとえば、perl($/)とawk(RS)でレコードセパレータを指定できます。または、次のようなこともできますecho "$var" | sed 's/<delimiter>/\n/' | grep <pattern>。あなたの実際の問題が何であるかに応じて、多くの多くの答え。
Cascabel

回答:


2

それはあなたがちょうど出力を気にし、trあなたのために働くかもしれません:

che@nok ~ $ grep cpu /proc/cpuinfo | tr '\n' ';'
cpu family      : 6;cpu MHz             : 800.000;cpu cores     : 2;cpuid level : 10;cpu family : 6;cpu MHz : 800.000;cpu cores      : 2;cpuid level : 10;

実際、私はこのような大量のデータを変数内に保存しています。grep "something"はこれで機能しますが、希望どおりではありませんが、grepはデータの束を1行として扱います。そのため、特定の文字(ここでは「@」です)に変更します

:そして、あなたはこのようにそれを入れてみてくださいecho $my_var | tr @ '\n' | grep blahblah
チェ

私はそれをしましたが、シェルがコンテンツを実行しようとしているようです:S

2
$my var空白と改行を保持するには、変数を引用符で囲む必要がありますecho "$my_var" | ...
mrucci、

1

agrepアリゾナ大学のデリミタを設定できます。これはgrepの簡単な置き換えではありません。これは、異なるアルゴリズム(近似grep、エラーまで一致する可能性があります)を使用し、パターン構文が異なります。しかし、それは便利なツールです。

残念ながら、ライセンスの問題のためagrep、と呼ばれる類似のプロジェクトが複数あり、それらはすべて互換性があるわけではありません。しかし、すべてのバージョンで区切り文字を設定できると思います。


1
case $# in
0|1|2)  cat >&2 <<EOF
    Usage: $0 delimiterstring pattern files....
    Behaves like grep -pdelimiterstring but on linux
    DOES NOT SUPPORT MOST ARGUMENTS
    unlike grep -p - leaves delimiterstring in output

    NO -p just the delimeterstring
    note: delimiterstring has to work in the sed command where the ${d} is
    if you are going to use @ in the delimeter string, then the @'s
    need to be replaced by someother character

EOF
    exit 0
;;
3)  mode=one ;;
*)  mode=many ;;
esac
d="${1}"
p="${2}"
shift 2
while [ $# -gt 1 ]
do
    sed "s@${d}@\x00@g" "${1}" | grep -z  "${p}" -  | (
        case $mode in 
        many) sed -e "s@\x00@${d}@g"  -e "s@^@${1}: @" ;;
        *)    sed -e "s@\x00@${d}@g"  ;;
        esac
    )
    shift
done

1
(1)これで問題が解決する可能性がありますが、もう少し説明する方がよいでしょう。たとえばd="${1}"、単に言う代わりに言うべき本当の理由はありますd="$1"か?(2)警告を拡張する必要があります。これが複数のファイルで使用されている場合、いずれかのファイル名に「@」が含まれていると問題が発生します。(3)(Nit pick)真の「grep」置換/エミュレーターも、ゼロのファイル引数で機能します。
スコット


0

これどう?何か使用?

grepファイル "search-string" | awk 'BEGIN {RS = "\ n"; ORS = "@"} {print}'

「@」を必要に応じて設定します。

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