• ベストアンサー

grepで半角空白または行末が続く語を探したい

grepもしくはegrepで、半角空白または行末が後ろに続くabcという語を探すにはどう表現すればよいでしょうか? 例えば、 $ echo 'abc' | grep 'abc[ $]' では$が行末ではなく$という文字そのものになります。 2014年8月3日

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

[]の中では、基本的に特殊な文字の意味が無くなり、その文字そのものになります。 AかBのいずれか、という場合は、 | が使えます。 abs |$ だと、 abc空白 または 行末 となるので、 ()を使って、まとめます abc( |$) grepの場合は、グループ化の(),選択の | はそれぞれバックスラッシュを伴った \( \) \I を使います。

RASUM2
質問者

お礼

kmee様、ありがとうございます。 お教え頂いたとおり、 $ echo 'abc' | grep 'abc\( \|$\)' でできました。 2014年8月3日

関連するQ&A

  • 秀丸を利用して、空白から空白の間で、正規表現を使う

    秀丸を利用して、空白から空白の間で、正規表現を使いたいのですが、 やりかたが分かりません。 ^半角スペース.+?半角スペース と思ったのですが、違いました。 正規表現を使いたいところは、 こんな感じになってます。 謎の空白 半角空白 文字列 謎の空白 半角空白 (行頭からここの文字列の前だけ切りたい)  謎の空白 半角空白 文字列 謎の空白 半角空白 (行頭からここの文字列の前だけ切りたい)          : てっきり、全角空白かと思い、記号表示させてみたけど、違いました。 次に、タブかな、と思い、記号表示させてみたけど、違いました。 空白って、全角と半角とタブしか思いつかないのですが、 それ以外に何かあるのでしょうか? また、それは、正規表現で、どう扱うのでしょうか?

  • 半角空白チェックについて

    いつもお世話になっております。 javascriptで半角空白チェックを行っております。 その場合に、半角空白のJISコードは キーボードから入力した場合は「0x20」 (Unicodeでも「0x20」) 代替文字列(&nbsp;)の場合は「0xa0」 (Unicodeでは「0xf8f0」??) となります。 両方とも半角空白と扱いたいため以下のようなロジックを用いています。 【javascript部】 function chk_han_kuhaku(i_char) {   for( i=0; i<i_char.length; i++ ){     var c = i_char.charCodeAt(i);     // Unicodeで比較     if ((c == 0x20) || (c == 0xf8f0)) {       alert(i + "文字目は半角空白です。");     } else {       alert(i + "文字目は半角空白ではありません。");     }   } } 【html部】 <input type="button" value="test" onclick="javascript:chk_han_kuhaku('&nbsp;abc de f')"> この場合、「0x20」はif文でhitしますが 「0xf8f0」にはif文でhitしません。 どういった対処が必要でしょうか? どなたかご教授下さい。 環境は OS:WindowsXP SP2 ブラウザ:IE6 です。 宜しくお願いいたします。

  • 「""」内にある空白に「_」アンダーバーを挿入

    Excel2010での関数の質問です。 │ │ │ │ └─"ABC DE"  ←元データ │ │ │ │ └─"ABC_DE"  ←完成形 「""」内にある半角の空白に「_」アンダーバーを 関数を使って挿入させたいと考えています。 (「""」内の文字は一意ではありません。) =SUBSTITUTE(A11," ","_") を使用したら、全ての空白に「_」アンダーバーが 挿入されてしまい、 │__│__│__│__└─"ABC_DE" になってしまい、「|」の間にも「_」アンダーバーが 挿入されてしまいます。 (「|」と「|」の間は、半角空白が2つ入っています。) 括弧内の文字を抽出なら質問箱に沢山あるのを 確認していますが、括弧内の文字だけを変更は 見当たりませんでした。 「""」内にある半角の空白に「_」アンダーバーを 挿入させる関数をご教授下さい。 よろしくお願いします。

  • 文字列前後の「全角空白/半角空白/改行文字」を取り除く

    PHPで、「文字列の前後に付加されている全角空白/半角空白/改行文字を取り除く」 という処理をしたいのですが、以下のように置換処理を書くとうまくいきません。 $after = preg_replace('/^[  \r\n]*(.*)[  \r\n]*$/u', '$1', $before); // [  \r\n]→[半角空白、全角空白、改行文字]です どううまくいかないのかといいますと、入力として半角スペース+全角文字が入ったときに、全角文字の先頭文字が文字化けしてしまいます。 たとえば、 <半角スペース>あああ をこれにかけると、 <よくわからない文字>ああ となります。 以下のように2回に分けてみると、正常に動きます。 $tmp = preg_replace('/[  \r\n]*$/u', '', $before); $after = preg_replace('/^[  \r\n]*/u', '', $tmp); 最初のように1回の正規表現による置換で済ませたい場合、 どのように書くのが適切なのでしょうか? PHPのバージョンは5.2.3です。

    • ベストアンサー
    • PHP
  • 全角空白が間に挟まれているキーワードで検索

    どこかに書いてあったことを参考にしたのですが、 $ find /tmp -type f > find.txt ; cat find.txt | while read LINE ; do echo grep -l \"This\\s*program\" \"$LINE\" >> grep_script.sh ; done によりできあがったスクリプト grep_script.sh を走らせることで、その中の一行一行で grep -l "This\s*program" /tmp/sample.txt こういう感じのコマンドが実行され、 半角空白が間に挟まれている「This program」を検索できますが、 全角空白が間に挟まれている「This program」を検索するにはどうすればいいでしょうか? 全角スペースの文字コード 0x81,0x40 を使えばいいのかな、とは思ったのですがやり方が分かりません。 どのようにすればいいでしょうか? よろしくお願いします。

  • 正規表現の ^

    grep -n '^^#' abc.txt 上記は、「#が行末にある行番号とその行を表示する」とある本に書かれています。 どうして#が行末に限定されるのかわからないのですが。 ^が二つ並ぶと、その次にくる文字は行末になるという規則があるのでしょうか。

  • コマンド履歴が~/.bash_historyに保存されない

    通常、コマンド履歴は~/.bash_historyに保存されるはずだと思っていましたが保存されていないようです、原因がわかりません。 助けて頂けませんでしょうか [root@localhost sub]# su - hoge [hoge@localhost ~]$ ls Desktop i a testdir ec.txt [hoge@localhost ~]$ tail ~/.bash_history set|grep abc abc=`date` set|grep abc echo $abc abc=1 echo $abc abc=$(date) echo $abc alias exit

  • 正規表現を利用して複数の半角空白を1つに置換しようとしています。

    正規表現を利用して複数の半角空白を1つに置換しようとしています。 但し、シングルクォートで囲まれている部分は置換の対象外としたいのですが、どのようなパターンにすれば置換する事が出来るでしょうか。 先読み表現、後読み表現は利用出来る環境です。 どうか良い知恵をお貸し下さい。

  • ホームページビルダー 空白の入れ方

    こんばんわ、ホームページビルダー14の体験版でホームページの作成中なのですが文字の後ろに空白が入らず困ってます。           ABC        □□□□□□ABC        ABC□□□□□□ ↑のようにしたいのですが、すべて中央揃えで□は空白です。2段目は出来たのですが3段目のように文字の後ろに空白を入れることが出来ません。 作成中はちゃんと形になっているのですがプレビューで見ると空白が無視されています。 中央揃えにした理由はブラウザで表示させる左に寄ってしまって右側に無駄なスペースが出来てしまったからです。 作成はスタンダードの標準モードです。 ホームページ作成初心者でして分かりやすく教えて頂けないでしょうか? 他に良い方法があればお願いします><

  • 置換演算子を使うと空白が入ってしまう

    $test = abcdef; $test =~ s/abc//g; 上記の様に置換演算子を使って文字列の削除を行うと、 「 def」の様に、削除した文字列に半角空白が入ってしまいます。 1回や2回ならよいのですが、何回も処理を行うと、 最終的に大量の空白が挿入されてしまい、大変困っています。 なんとか削除した部分に空白を挿入しない方法はないものでしょうか? 解決法がわかる方がいらっしゃいましたら、御教授頂きたく、 よろしくお願いします。

    • ベストアンサー
    • CGI