ファイルにリストされているファイルパスを見つけて置き換える方法

ファイルにリストされているファイルパスを見つけて置き換える方法

以下の内容のファイルがあります。行に「.idt」という単語がある場合は、その前にファイルパス(例:/bin/dir/test/abcdef.idt)があることを確認する必要があります。その場合は、ファイルパスを削除して実際のファイル名のみを保持してください(例:abcdef.idt)。 idtファイルは常に絶対パスと呼ばれる必要はありません。ただファイル名にすることもできます。 1行に1つのidtファイルのみを記述できます(< file> .. </file>タグ間)。これはディレクトリ内のすべてのファイルに対して実行する必要があります。

次の例では、emptyst1.idt、emptytest2.idt、emptyst3.idtを含む3行を参照してください。

入力ファイルの内容の例(xmlファイル):

<Application Name="empBnf" ServiceType="SOAP" BitMode="32" Path="/test/bin"/>
<FileList>
    <File>/test/src/repos/emp.deploy/emptest1.idt</File>
    <File>emptest2.idt</File>
    <File>
          /test/src/repos/emp.deploy/emptest3.idt
     </File>
    <File>/test/src/repos/emp.deploy/emptest.wsdl</File>
</FileList>
<Service Qualifier="http://www.mytest.com/test/empbnf" Name="/test/src/repos/empBnf" XManagement="Container">
    <Operation>Operation</Operation>
</Service>

出力は次のようになります。

<Application Name="empBnf" ServiceType="SOAP" BitMode="32" Path="/test/bin"/>
<FileList>
    <File>emptest1.idt</File>
    <File>emptest2.idt</File>
    <File>
          emptest3.idt
     </File>
    <File>/test/src/repos/emp.deploy/emptest.wsdl</File>
</FileList>
<Service Qualifier="http://www.mytest.com/test/empbnf" Name="/test/src/repos/empBnf" XManagement="Container">
    <Operation>Operation</Operation>
</Service>

ベストアンサー1

あなたが使用できる:

sed -i -E -e 's/(\/.*\/)(.*\.idt)/\2/' file_list

-iこれにより、すべてのファイルパス(「すべて」:ファイル内の各行の最初のエントリ)で/..../filename.idt内部()の置き換えが行われます。filename.idtファイル名の前に絶対パスがない場合、正規表現は一致せず、何も起こりません。コマンドプロンプトでfile_list等に置き換えることができます。出力がディスクに書き込まれる前に、まず*.xmlオプションなしでコマンドを実行してみることができます。-i

おすすめ記事