テキストファイルから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
システムで必要な場合)。