テキストファイルから1行をコピーし、変更された行を同じファイルの行末に追加します。

テキストファイルから1行をコピーし、変更された行を同じファイルの行末に追加します。

テキストファイルから1行をコピーしてすぐに編集してすべての/を|に置き換えて、同じ行の同じ行に貼り付けたいです。

テキストファイルの最初の行は次のとおりです。

http://webpage.com/(name-never-changes)/aCcboeasdfdRD/asdfasdft21.jpg

(name-never-changes)と.jpgの間にテキストをコピーする

/aCcboeasdfdRD/asdfasdft21

/に変更|

|aCcboeasdfdRD|asdfasdft21

そして、URLのある行の末尾に区切り文字を追加します。区切り文字は、テキスト、数字、または特殊文字です。

http://webpage.com/(name-never-changes)/aCcboeasdfdRD/asdfasdft21.jpg  (separator)  |aCcboeasdfdRD|asdfasdft21

これはURLが異なる複数のテキストファイルに対して機能します。

新しいファイルを作成してマージすることはできません。テキストファイルの名前が異なり、ファイル名がわからないため、動的である必要があります。

答え1

この試み、

awk -F '[/.]' '{print $0" (separator) |"$(NF-2)"|"$(NF-1)}' file

http://webpage.com/(name-never-changes)/aCcboeasdfdRD/asdfasdft21.jpg (saperatot) |aCcboeasdfdRD|asdfasdft21
  • /.2 つのフィールド区切り記号
  • $0行全体を印刷
  • $(NF-2) $(NF-1)最後から3番目と2番目のフィールド

ファイルとして保存したい場合

オプション1:(行が少ない場合)

echo "`awk -F '[/.]' '{print $0" (separator) |"$(NF-2)"|"$(NF-1)}' file`" > file

オプション2:(大容量ファイルの場合)

 awk -F '[/.]' '{print $0" (separator) |"$(NF-2)"|"$(NF-1)}' file > tempFile ; mv tempFile file

フォルダに複数のファイルがある場合:

cd /path/to/dir
for file in `ls`
do
    echo "`awk -F '[/.]' '{print $0" (separator) |"$(NF-2)"|"$(NF-1)}' $file`" > $file
done

答え2

解決策は次のとおりですsed

sed 'h; s@^[^/]*//[^/]*/[^/]*/@  (separator)  |@; s@/@|@g; s/\.jpg$//; x; G; s/\n//'

ステップバイステップ:

  • h現在の行を「パターン空間」から「予約空間」にコピーします。
  • s@^[^/]*//[^/]*/[^/]*/@  (separator)  |@S代替コマンドは区切り文字として使用されます@。それは取り替える
    もの//もの/もの/
    (つまり)必要に応じて行うことができます。http://example.com/(top-level-directory)/  (separator)  |
    s@^http//example.com/(top-level-directory)/@ (separator) |@
  • s@/@|@gまたS代替コマンドは区切り文字として使用されます@/行の残りのすべての文字を文字に置き換えます|。確実であれば((second-level-directory)そして(filename))、省略できますg
  • s/\.jpg$//明らか.jpgに、拡張は行末から削除されます。 (拡張子が何であるかわからない場合は、同様のことができますs/\.[^.]*$//。)
  • xパターンスペースとホールドスペースを交換して、元の行をパターンスペースに戻すようにします。
      (分割器)  |(補助ディレクトリ)|(ファイル名)
    私たちが作ったばかりのものは貨物室にあります。
  • G Getsはスペースの内容を保持し、それをパターンスペースに追加します(その間に改行を挿入)。
  • s/\n//改行文字を削除します。

これにより、空行が空行に渡されます。他の行は破壊されます。

ファイルをその場で編集するには、sedオプションを渡すだけです-i(または-i.bakシステムで必要な場合)。

関連情報