
こんばんは。
Cシェルで1文字単位で置換する場合なのですが、
A→Y
B→"
C→3
D→~
のように対応しているファイルを読み込んで合致したらその文字に置換という方法にしています。その場合、D→~なので、ホームディレクトリが格納されてしまいます。
例えば、「ADC」という文字列があったら、「Y~3」というように置換したいのですが、「Y***/###3」のようになってしまいます。置換の際はechoとsedを使って、一度ファイルに落とし、それをまた変数に格納しています。
また、{や0もうまく読み込んでくれませんでした。クォーテーションでくくるとクォーテーションごと格納されました。("~" or '~')
ファイルの方に\をつけて、\~でもうまくいきませんでした。
なんだか支離滅裂な文章ですが、ご存知の方いらっしゃいましたらどうぞ宜しくお願いします。
No.3ベストアンサー
- 回答日時:
ぐはっ, 自分の馬鹿さ加減に頭痛が....
sed の -f オプションを忘れてた... orz
実際には sed は「隠れた制限」があるときもあるんだけど, 制限にひっかからないならこうした方がいいかな:
まず, 次の行を csv2pat.pat という名前のファイルに保存します:
s,[]^[*+?./\\&],\\&,g; s#^#s/#; s#,#/#; s#$#/g#
でもって, 次のように実行します:
sed -f csv2pat.pat ~/work/Book1.csv > ~/work/Book1.pat
sed -f ~/work/Book1.pat あれ > それ
終わり.
とりあえず
> echo $chg_word | sed -e s/$before/$after/ >work/moji.txt
> set Cnv_lit = `cat ~/work/moji.txt
> set Cnv_file = $Cnv_file$Cnv_lit
の 3行で何をしたいのかわかりませんけど...
お礼遅くなりまして申し訳ありません。
sedのfオプションで置換ファイルを書き換えるんですね!
とりあえず
> echo $chg_word | sed -e s/$before/$after/ >work/moji.txt
> set Cnv_lit = `cat ~/work/moji.txt
> set Cnv_file = $Cnv_file$Cnv_lit
の 3行で何をしたいのかわかりませんけど.
sedで置き換えたものを一旦テキストに落として(1)、テキストから変数に入れなおして(2)、一字ずつバラした文字列をくっつける(3)というようにしていましたが、もうちょっとやり方自体を考えてみようと思います。
ご回答ありがとうございました。
No.2
- 回答日時:
とりあえず動作させるだけなら必要に応じて
set noglob
と
unset noglob
を使えばいいと思うけど....
なんというか, 「awk で必要な処理をテンポラリファイルに書き出して, それを sed に与える」方が (可能なら) 見通しがいいような気がするのはなぜだろう....
もっと可能なら Perl で処理しちゃう.
No.1
- 回答日時:
????
sed でできるような気がするんですけど....
どのように実行しようとして期待通りにいかなかったんでしょうか?
早々のご回答有難うございます。
置換元:EABC
変換用ファイル(Book1.csv)
A,Y
B,"
C,3
D,~
E,8
想定置換後:8Y"~
としたいのですが、「8Y"****/****(ホームディレクトリのパス)」になってしまいます。
スクリプトは以下のようにしています。
#変換リスト読み込み
set filename1 = ~/work/Book1.csv
set file_cnt = `cat $filename1 | wc -l`
#置換
@ line = 1
whie($file_cnt >= $line)
set file_word = `cat $filename1 | head -n $line | tail -n 1`
set before = `echo $file_word | awk -F, '{print $1}'`
set after = `echo $file_word | awk -F,'{print $2}'`
echo $chg_word | sed -e s/$before/$after/ >work/moji.txt
set Cnv_lit = `cat ~/work/moji.txt
set Cnv_file = $Cnv_file$Cnv_lit
moji.txtには~のみなので、変数に格納しようとすると自動的にホームディレクトリになってしまう??ようなのです。
このsedの使い方で出来ますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- PDF acrobatでwordファイルをpdfに変換すると文字化けする 3 2023/02/10 09:31
- フリーソフト Windowsの特殊文字を削除や変換したい そんなフリーソフトはありますか? 3 2022/11/09 00:05
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Word(ワード) ワードで,特定の文字だけ,字体を一括変換する方法は? 1 2023/04/26 10:11
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- その他(コンピューター・テクノロジー) 正規表現の置換で一部の文字列をそのまま残したい 2 2022/05/03 19:19
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Googleスプレッドシートでワイ...
-
《》で囲まれた文字をすべて削...
-
テキストエディタを探しています
-
TeraPadでの置換方法
-
大量のHTMLファイルに同じ文字...
-
IME 郵便番号辞書 で 都道府...
-
正規表現で最初にマッチしたも...
-
【正規表現に詳しい方】ダブル...
-
ファイル名に空白がある時、一...
-
正規表現で完全一致したキーワ...
-
Flexible Renamer 半角スペー...
-
ワードを使用した特定かつ複数...
-
txtファイルの一部を削除するフ...
-
EmEditorでの置換方法
-
WinMergeにて置換の際に、文字...
-
CSVファイルの文字列を置換...
-
ファイル名を特定の文字までを...
-
【シェル】チルダの置換
-
秀丸エディタのマクロのことで
-
(*)を_【*】に一括変換したいの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Googleスプレッドシートでワイ...
-
TeraPadでの置換方法
-
ファイル名を特定の文字までを...
-
《》で囲まれた文字をすべて削...
-
正規表現で最初にマッチしたも...
-
正規表現で完全一致したキーワ...
-
IME 郵便番号辞書 で 都道府...
-
ファイル名に空白がある時、一...
-
【正規表現に詳しい方】ダブル...
-
ワードを使用した特定かつ複数...
-
Excel VBAでWord文書とText文書...
-
Flexible Renamerの正規表現に...
-
(*)を_【*】に一括変換したいの...
-
WinMergeにて置換の際に、文字...
-
メモ帳の置換機能で特定の文字...
-
CSVファイルの文字列を置換...
-
Flexible Renamerの検索と置換...
-
EmEditorでの置換方法
-
どのブックでも使えるマクロの...
-
秀丸の正規表現で [ や ] 自体...
おすすめ情報