![]() |
|
|
Googleのunix.com
|
|||||||
| シェルプログラミングとスクリプティング KSH 、 CSH 、 shに、 bashの、はPerl 、 PHPは、削除するsed 、 Awkの、他のシェルスクリプトやシェルスクリプト言語についての質問の投稿はこちら。 |
その他のUNIXおよびLinuxフォーラムトピックは参考にすること
|
||||
| スレッド | スレッドスターター | フォーラム | 返信 | 最後の投稿 |
| どのようにマッチした文字列が行を削除するsedまたはループを使用するためにはgrepを始めるために? | AMBERは | シェルプログラミングとスクリプティング | 8 | 2009年7月13日 06:26午前 |
| はgrepと文字列と行を除いて行を削除 | vj8436 | シェルプログラミングとスクリプティング | 14 | 2009年4月17日 12:25午後 |
| txtファイルに文字列の後に10行はgrepする。 | suman82 | シェルプログラミングとスクリプティング | 6 | 2008年12月13日 01:08午前 |
| 数行の後にはgrepの文字列& | ashterix | シェルプログラミングとスクリプティング | 7 | 2008年12月7日 09:20午前 |
| 次の文字列と行はgrep Ñ | ashterix | シェルプログラミングとスクリプティング | 8 | 2005年11月21日 11:38午後 |
![]() |
|
|
LinkBack | スレッドツール | このスレッドを検索 | スレッドを評価 | 表示モード |
|
|
|
||||
|
ファイルの2文字列の間の行の文字列はgrep
やあ、 次の問題で私を助けてください: 私は、以下の行では、 XMLファイルが コード:
<cisco:name>
<cisco:mdNm>Cisco Device 7500 A Series</cisco:mdNm>
<cisco:meNm>10.1.100.19</cisco:meNm>
<cisco:ehNm>/shelf=1</cisco:ehNm>
<cisco:subname>
<cisco:sptp>Cisco PortA Series</cisco:sptp>
<cisco:aliasNameList xsi:nil="true"/>
<cisco:owner xsi:nil="true"/>
<cisco:subportname>
<cisco:cpt>Cisco SubPort B Series</cisco:cpt>
<cisco:aliasNamesubList xsi:nil="true"/>
<cisco:userLabel xsi:nil="true"/>
</cisco:subportname>
</cisco:subname>
<cisco:subname>
<cisco:sptp>Cisco PortAB Series</cisco:sptp>
<cisco:aliasNameList xsi:nil="true"/>
<cisco:owner xsi:nil="true"/>
<cisco:subportname>
<cisco:cpt>Cisco SubPort AB Series</cisco:cpt>
<cisco:aliasNamesubList xsi:nil="true"/>
<cisco:userLabel xsi:nil="true"/>
</cisco:subportname>
</cisco:subname>
</cisco:name>
<cisco:name>
<cisco:mdNm>Cisco Device 7500B Series</cisco:mdNm>
<cisco:meNm>10.1.100.20</cisco:meNm>
<cisco:ehNm>/shelf=2</cisco:ehNm>
<cisco:subname>
<cisco:sptp>Cisco Port B Series</cisco:sptp>
<cisco:aliasNameList xsi:nil="true"/>
<cisco:owner xsi:nil="true"/>
<cisco:subportname>
<cisco:cpt>Cisco SubPort B Series</cisco:cpt>
<cisco:aliasNamesubList xsi:nil="true"/>
<cisco:userLabel xsi:nil="true"/>
</cisco:subportname>
</cisco:subname>
</cisco:name>
自分のコードでは、最初の<cisco:name>と< /シスコ:名前>とは、 2つの文字列をチェックします後にそれをカウントするgrepする<cisco:cpt> 。のようにファイルの最後まで続ける コード:
#!/bin/sh
sed '/<\/cisco:name>/{G;}' test.xml >temp
nawk 'BEGIN{RS=""}
{
grep -c '<cisco:cpt>' print
}' temp
rm temp
このコードでは、オペアンプとして提供されていません 最初に<cisco:name>と< /シスコ:名前>ループは横にして1次の2通りを与える必要があります 支援plz |
|
||||
|
もっと正式には、 perlの 多くの利用可能なモジュールを使用してXML文書を扱うことができます。 下の結果を参照することがあります コード:
use XML::Parser;
my $file = 'a.xml';
my ($flag,$index,@arr,%hash)=(0,-1);
sub start_handler
{
my $expat = shift;
my $element = shift;
if($element eq 'cisco:name'){
$index++;
}
else{
if($element eq 'cisco:cpt'){
$flag=1
}
else{
$flag=0;
}
}
}
sub char_handler
{
my ($p, $data) = @_;
if( ($flag eq '1') and !($data =~ /^\s*$/)){
$arr[$index]++;
$hash{$index}.=" ".$data;
}
}
my $parser = new XML::Parser(ErrorContext => 2);
$parser->setHandlers(Start => \&start_handler,
Char => \&char_handler);
$parser->parsefile($file);
for(my $i=0;$i<=$#arr;$i++){
print $arr[$i],"\n";
print $hash{$i},"\n";
print "--------\n";
}
|