Cシェル初心者です.
下記のようなファイルで"begin BBB"~"end"を切り取って(※(1))
いろいろ編集し、元のファイルの中に戻したい場合(※(2))の手順って
どのようにしたらよいでしょうか?
(1)切り取り方法の質問
($1==begin、$2==BBBからendまでの切り取り)
(2)編集後のファイルの挿入方法の質問。
(ファイルの途中への挿入方法)
以上、2点のご教授よろしくお願いします。
尚、環境はSolalis2.6です。
%cat file.txt
begin AAA
・
・
begin BBB
・
・
end
・
・
end
No.5
- 回答日時:
まあ、シェルだけでやるというパズルは置いといて ^^
begin BBB -- end 間に他の end がないという前提ですね。
その間に限定した文字の置換でよければ、
sed -e '/begin BBB/,/end/s/前/後/'
で実現できます。
1行に複数個置換対象があるなら、最後に g をつけます。
他のパターンもあれば、同じように並べれば済みます。
置換されたファイルが file として既にあるなら、
sed -e '/begin BBB/r file' -e '/begin BBB/,/end/d'
となります。
もし、一旦、該当部分をファイルとして取り出す必要があるなら、
sed -n '/begin BBB/,/end/p' >fff
で取り出し、変更してから、上のようにしてやればOKです。
ここまでの程度であれば、awk は出てこなくても大丈夫でしょう。
No.4ベストアンサー
- 回答日時:
シェルのビルトインだけですか~あ。
ちょっとしんどいかな。(1)切り取りコマンド
#! /bin/csh -f
# 起動方法 cmd fname
# begin BBB から end までを fname で示されたファイルに出力する。
set FNAME = $1
set INPUT = $<
while ( "$INPUT" != "" )
set CHECKBEGIN = `echo $INPUT | grep 'begin BBB'`
if ( "$CHECKBEGIN" != "" )
set FILEOUT
endif
if ( $?FILEOUT )
echo $INPUT >> $FNAME
endif
set CHECKEND = `echo $INPUT | grep end`
if ( "$CHECKEND" != "" )
if ( $?FILEOUT )
unset FILEOUT
endif
endif
set INPUT = $<
end
(2)挿入コマンド
#! /bin/csh -f
# 起動方法 cmd fname
# begin BBB から end までを fname で示されたファイルで置き換える。
set FNAME = $1
set INPUT = $<
while ( "$INPUT" != "" )
set CHECKBEGIN = `echo $INPUT | grep 'begin BBB'`
if ( "$CHECKBEGIN" != "" )
set EXCHANGE
endif
if ( $?EXCHANGE )
if ( ! $?FILEOUT )
cat $FNAME
set FILEOUT
endif
else
echo $INPUT
endif
set CHECKEND = `echo $INPUT | grep end`
if ( "$CHECKEND" != "" )
if ( $?EXCHANGE )
unset EXCHANGE
endif
endif
set INPUT = $<
end
試してはいません。
空白が連続していると正しく出力できませんが、とりあえず。
どちらも標準入力から読みますから
cmd fname < original_file
のように起動して下さい。
No.3
- 回答日時:
Cシェルでって言っている以上、Cシェルのビルトインコマンドのみで実現したいのではないでしょうか? exやsedを使ったらshellだけじゃないっすよね。
{意地の悪い読み方 :-P }shellのみでは私は実現不可能かきわめて困難とおもいます。
私自身はawk使いなので単純な作業ならawk,そうでないならperl最後はyacc(bison)の順番で考えるとおもいます。
shellでの実装は最初から考えないです。
まあ、どちらにせよbeginとendの部分の詳しい構文ルールといろいろ編集の部分のやりたいことがわからないと最適なツールと実装方式は紹介できませんね。
No.2
- 回答日時:
いくつかの具体的な条件がわからないと、正確な解は出せないです。
begin BBB と、それに対応する end の間に、他の end が入ったりはしないで
しょうか?あるいは、対応する begin と end の字下げは確実に同じでしょう
か?
編集とは具体的に何をするのでしょうか?あらかじめ用意してあるものと取り
替えるのか、内容を見て機械的な処理をほどこすのか。
簡単な場合には sed だけでできたり、ed へのコマンドを適当に並べてやれば
できたりもします。複雑になれば、awk や perl を呼ぶ必要があるかもしれま
せん。
複雑な構文規則があって、どんな場合にも完璧に対応させたいとなると、perl
でも荷が重くて、C と yacc になったりします。
やりたいことの具体的な中身しだいです。
この回答への補足
説明不足ですいません。
補足しますので、またご教授願います。
>begin BBB と、それに対応する end の間に、
>他の end が入ったりはしないでしょうか?
入りません。
--
>あるいは、対応する begin と end の字下げは確実に同じでしょうか?
字下げは不確定です。
--
>編集とは具体的に何をするのでしょうか?
今回は、文字の置換を行います。
編集内容は、sed等を用いてすでにできています。
ただ、今後応用できるように略式で書いてみました。
--
>複雑になれば、awk や perl を呼ぶ必要があるかもしれません。
perlは全く知りませんが、awkは少し使えるので
awkで説明していただければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) VS CodeでTEXファイルにPDF形式の図を挿入する方法 2 2023/01/19 11:56
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- その他(プログラミング・Web制作) .htaccessファイルの修正がこれで問題ないかどうか 1 2022/04/21 08:42
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- UNIX・Linux EC2の暗号化された.confファイルを複合したい! 1 2023/06/08 23:20
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Excel(エクセル) Excel VBA 3 2023/04/22 10:46
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクスプローラのアクティブウ...
-
windows11でクイックスキャン等...
-
Windows(11)ってもうゴミなんで...
-
Windows Media Playerを開くと...
-
アイコンに、四角い枠が出来て...
-
Windows11のデスクトップのアプ...
-
Windows Mac Linux で共用可能...
-
Windows11 システム通知音がも...
-
windows11におけるファイルの並...
-
マザーボードを交換した時のOS...
-
Microsoft365について
-
windowsにいてなぜwindowsxpか...
-
「Wi-Fiアダプターへのアクセス...
-
windows11 きれいなロック画面...
-
MAC VirtualBoxにインストール...
-
Windowsで大量の画像サイズを半...
-
Mac用の外付けHDはWindowsPCで...
-
Windows11 ゴミ箱 ファイルの取...
-
Windows10のメッセージに関して...
-
Microsoft edgeのメッセージに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows Media Playerを開くと...
-
エクスプローラのアクティブウ...
-
windows11でクイックスキャン等...
-
Windows11のデスクトップのアプ...
-
windowsにいてなぜwindowsxpか...
-
windows11におけるファイルの並...
-
アイコンに、四角い枠が出来て...
-
MS-DOS 6.22のダウンロード
-
Windows11 システム通知音がも...
-
Acer AXC605-H54D にOSをインス...
-
勝手に無変換になる
-
VirtualBoxのゲストOS起動時にU...
-
Windowsの古いゲーム(32bit OS...
-
windows11 きれいなロック画面...
-
Microsoft edgeのメッセージに...
-
Windows10で小規模LANの構築は...
-
Windowsで大量の画像サイズを半...
-
Windowsアップデートしたらタス...
-
「Wi-Fiアダプターへのアクセス...
-
Microsoftのページだけ全て「申...
おすすめ情報