grepの検索でテキスト内のひとつでも全角文字がある行を
抽出したいと思ってます。1つの方法は見つかったのですが、
時たまバグがあるそうですので、
他の方法を探そうと思ってます。
わかっている方法は、以下のとおりです。
> grep -n '.*[^ -~。-゜].*' test_data.txt

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

「ASCIIに含まれる文字だけ」の行以外という案で、


LANG=C で、ロケール(言語)を英語にした上で、grep -v で除外を指定。

LANG=C grep -n -v '^[[:cntrl:][:print:]]*$' test_data.txt
    • good
    • 2
この回答へのお礼

ご回答ありがとうございます。
やってみたのですが、半角カタカナのみも反応してしまいました。
申し訳ないですが・・・

お礼日時:2009/10/21 09:23

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q全角文字を PDFで変換できません。(文字化けしてしまいます。)

全角文字をPDFで変換しようとしても、文字化けしてしまいます。

LabEditorで入力したいかなる全角文字も、PDFでは「・・・」で出力されてしまいます。

また、HPからダウンロードしたファイルも、全角文字は同じように文字化けして出力されます。

使用環境は、OSはWindows XP、Acrobat Professinal 6,0です。

解決策を教えていただきたいと思います。
よろしくお願いします。

Aベストアンサー

フォントの埋め込みにはチェックが入っていますか?
印刷メニューでAdobewriterを選んで出力しても同じですか?

Qgrepで'-x'がある行をgomi.txtから探すために

grep -x gomi.txt

を実行したのですが-xがオプションとみなされうまくいきません
どうしたらいいでしょうか?

Aベストアンサー

$ grep -e -x gomi.txt

Q全角文字変換

JAVAScriptで半角文字を全角文字に変換したいのですが、どのようにプログラミングすればよろしいのでしょうか?
教えていただけないでしょうか?

Aベストアンサー

まず仕様をきめます。
・英数だけでよいのか?その他記号も必要か?
・制御系の文字がある場合はどうするか?
・日本語はどこまで?カタカナ?ひらがな?
・カタカナの場合、濁音(半濁音)をどうするか?

プログラム的には文字列を関数にわたして、
戻り値を受け取るというやり方です

txt=han2zen("文字列ABCアイウ");
function han2zen(num){
//処理
return 戻り値;
}

replaceメソッドでプログラムを組めば効率的でしょう。

Qlinux(UNIX) の grep で、あるディレクトリ以下を再帰的に見て、全ての *.html ファイルに grep をかける方法

linux(UNIX) の grep で、あるディレクトリ以下を再帰的に見て、全ての *.html ファイルに grep をかける方法を教えてください。
簡単な事なのかもしれませんが、コマンドから打つ場合、どのようにすればよいか、分かりません。
Windows の秀丸のgrepなら簡単に出来るのですが。。。
どなたか教えてくださいませ。。。

Aベストアンサー

例えば
grep pattern `find あるディレクトリ -iname *.html`

QRuby1.9で全角文字を半角文字にうまく変換できません。

Ruby1.9で全角文字を半角文字にうまく変換できません。

英数字までは以下のロジックでうまく出来たのですが、カナが正しく変換されません。
何か良い知恵をどうかご教示のほどお願いいたします。

※★→←★の間の文字は半角カナです(ブラウザ上全角カナとなってしまうため、便宜上補足しました)。
moji = "イあ1Aa"
moji.tr('a-zA-Z0-9ア-ン', 'a-zA-Z0-9★→ア-ン←★')

結果:★→ウ←★あ1Aa 何故か半角のイではなく半角のウとなってしまう。
   ※アの場合のみ正しく半角のアに変換される。

Aベストアンサー

カナは文字コード表上でアルファベットの様に半角と全角で同じ順番に並んでいるわけではないので、trで単純に変換できません。


# coding: Windows-31J
require 'nkf'

input = "アイゥェォバヴァポヲ".encode('Shift_JIS')
output = NKF.nkf('-SsZ4',input ).encode('Windows-31J')
puts output

ruby 1.9.1p429 (2010-07-02 revision 28523) [i386-mswin32]の環境で確認しました。
エンコードは適宜変更して下さい。

Q正規表現 '\(.*\)\.' の意味

目的がファイル名から拡張子を取り除きたいのですが
expr `basename hoge.sh ` : '\(.*\)\.'
で標準出力の結果が hoge となり目的を達成する事ができました。
しかし  '\(.*\)\.' の意味がよく理解出来なくて悩んでおります。
色々と試してみた結果になりますが

expr `basename hoge.sh ` : '\(*\)\.'  .を取ってみた
出力無し

expr `basename hoge.sh ` : '\(.*\) .\を取ってみた
hoge.sh

expr `basename hoge.sh ` : '\(.*\).'  \を取ってみた
hoge.s

expr `basename hoge.sh ` : '\(...\)\.' ...にした
出力無し

expr `basename hoge.sh ` : '\(....\)\.' ....にした
hoge

以上、よろしくお願い致します。

Aベストアンサー

expr コマンドの 「expr 文字列 : 正規表現」書式で正規表現中で \( \) が使われていた場合は、それに囲まれた範囲が結果として出力されます。このことは、man expr で調べられます。

あとは、 . 任意の文字列、 * 直前の0回以上の繰り返し、 \. ピリオド文字
というのがわかれば、ピリオドの直前までの文字列を取り出すことがわかると思います。

また、拡張子が .sh だということがわかっていれば、
basename hoge.sh .sh
でhogeが得られます。

QLinux 全角文字・半角文字混在の16進数の文字列変換について(SJIS,UTF8)

質問タイトルのままですが、16進数の文字列変換について非常に困っています。
皆さんのお知恵をお貸しいただけないでしょうか。

サーバ間のメッセージのやり取りで、受信側にて16進数となっているデータをテキストに変換をしています。
送信側文字コードがUTF-8の場合は、以下のコマンドで問題なく変換できています。
(コマンド例)
  コマンド:echo -n 'e3 81 93 e3 82 93 e3 81 ab e3 81 a1 e3 81 af' |xxd -r -p
  実行結果:こんにちは

ところが送信元文字コードがsjisの場合、文字化けしてしまいます。

(コマンド例)
  コマンド:echo -n '82 b1 82 f1 82 c9 82 bf 82 cd' |xxd -r -p
  実行結果:ア・ソヘ

この場合、まずは、sjisのテキストにデコードした後に、UTF-8に変換するのかなと考えていますが、
どのようにしたら良いかわかりません。

どなたかご教授願えないでしょうか。

よろしくお願い致します。

質問タイトルのままですが、16進数の文字列変換について非常に困っています。
皆さんのお知恵をお貸しいただけないでしょうか。

サーバ間のメッセージのやり取りで、受信側にて16進数となっているデータをテキストに変換をしています。
送信側文字コードがUTF-8の場合は、以下のコマンドで問題なく変換できています。
(コマンド例)
  コマンド:echo -n 'e3 81 93 e3 82 93 e3 81 ab e3 81 a1 e3 81 af' |xxd -r -p
  実行結果:こんにちは

ところが送信元文字コードがsjisの場合、文字化けして...続きを読む

Aベストアンサー

Shift_JISの文字列としては正しく変換できています。

どうすればいいかは、あなたがどうしたいか、によります。

端末に表示したいだけなら、xxd で16進→バイナリ(実態はShift_JIS)に変換したものを、 nkf 等でUTF-8に変換となります。
ですが、ExcelのようなShift_JISを期待するアプリで使うなら、Shift_JISのまま扱うのが便利です。

Qdir /A /B /S *.txtをLinuxで

Windowsで

C:>dir /A /B /S *.txt

を実行すると、そのディレクトリ以下の*.txtファイルが
C:\abc\def\hij.txt
C:\abc\def\klm.txt
...
と出力されます。

これをLinux上で出来ないでしょうか。
ネット上で調べたのですが、私の実力では"/S"と同じことがLinuxでは出来ないようです。

Aベストアンサー

質問内容を正しく解釈しているかわかりませんので間違っていたらごめんなさいです。

例えば、/home以下の*.txtを出力するのならこんな感じでしょうか。

find /home -type f -name "*.txt"

おそらくlsコマンドではうまくいかないと思いますので。

QATOK16で変換候補に不必要な全角文字が出るのをやめたい

ATOK16+WinXPです。たとえば、"-[es]/-e" という半角文字列を"ふくすう”という読みで登録します。呼び出して変換しようとすると、半角の変換候補文字列と同時に全角の"-[e]s/-e"という候補文字列まで出てきてうっかり選択してしまいそうになって煩わしいのです。全学候補を候補小ウィンドウに表示させないようにするにはどうしたらいいでしょうか?

Aベストアンサー

ctrl+f12でプロパティを起動し、「入力・変換」タブで設定項目の中から「半角・全角変換」の所をクリックすると、右側に「□半角全角変換を有効にする」と言うチェックボックスがあると思います。

このチェックをはずす、あるいはチェックを入れて、右側のしない、半角、全角、学習の所で半角にするか、学習にしておくと良いと思います。

Q*.txtファイルの最終行だけ参照して、バッチファイルを作りたい

*.txtファイルのなかに"test"という文字をfindstrコマンド又はfindコマンドで探して、出力したいのですが、全ての行を参照して出力するのではなくて、最終行だけを参照して出力するといったバッチファイルを作成したいのですが、どうやればいいのでしょうか?

どうぞよろしくお願いいたします。

Aベストアンサー

tail コマンドを探してきて入れる(インストール)

for %%f in (*.txt) do find "test" %%f | tail -1


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報