Bash 脚本:按行编辑 .txt
Bash Script : Edit .txt by Line
我有一个长度未知的文本文件。每行有两个值:
VALUE1[SPACE]VALUE2
现在我必须获取另一个(或相同的)文件,其中包含一个新列表,例如:
0.0.0.0/rep/com/bla/blub/VALUE1/VALUE2/VALUE1-VALUE2.zip
...列表中的每一行都包含这两个值。我该怎么做?
我假设 VALUE1
和 VALUE2
不包含 space,否则第一个定义会变得不明确。有了这个假设,您可以在第一个 space 使用 cut
拆分一行,并使用字符串插值组成 filename
变量:
cat txt-File | while read VALUE1 VALUE2 _; do
filename="0.0.0.0/rep/com/bla/blub/$VALUE1/$VALUE2/$VALUE1-$VALUE2.zip"
# Do something with filename...
stat "$filename"
done
这是 awk 的一个很好的用例(已更新以处理括号):
awk -F" " '{ gsub("\(", "", ); gsub("\)", "", );print "0.0.0.0/rep/com/bla/blub/""/""/""-"".zip"}' test.txt > yournewfile.txt
这将用 space 拆分每一行,替换第一个标记 </code> 中的左括号并替换第二个标记 <code>
中的右括号,然后使用值它们各自的标记 </code> 和 <code>
在您使用 print
输出的字符串中
您的输入数据文件的格式是(VALUE1 VALUE2).
。你先去掉开头的(
,后面的).
有很多方法可以做到这一点,这里是一个
sed 's/(//g' yourfile | sed 's/).//g'
然后您可以将其传递给 awk
。这里</code>对应第一列,<code>
对应第二列:
sed 's/(//g' yourfile | sed 's/).//g' | awk '{print "0.0.0.0/rep/com/bla/blub/""/""/""-"".zip"}'
我会为此使用 sed
:
sed $'s,^[ \t]*\([^ \t]*\)[ \t][ \t]*\([^ \t]*\).*$,0.0.0.0/rep/com/bla/blub///-.zip,' filename >new-filename
如果您愿意,可以通过添加 -i.bak
就地修改原始文件:sed -i.bak $'s,
...,'
.
我有一个长度未知的文本文件。每行有两个值:
VALUE1[SPACE]VALUE2
现在我必须获取另一个(或相同的)文件,其中包含一个新列表,例如:
0.0.0.0/rep/com/bla/blub/VALUE1/VALUE2/VALUE1-VALUE2.zip
...列表中的每一行都包含这两个值。我该怎么做?
我假设 VALUE1
和 VALUE2
不包含 space,否则第一个定义会变得不明确。有了这个假设,您可以在第一个 space 使用 cut
拆分一行,并使用字符串插值组成 filename
变量:
cat txt-File | while read VALUE1 VALUE2 _; do
filename="0.0.0.0/rep/com/bla/blub/$VALUE1/$VALUE2/$VALUE1-$VALUE2.zip"
# Do something with filename...
stat "$filename"
done
这是 awk 的一个很好的用例(已更新以处理括号):
awk -F" " '{ gsub("\(", "", ); gsub("\)", "", );print "0.0.0.0/rep/com/bla/blub/""/""/""-"".zip"}' test.txt > yournewfile.txt
这将用 space 拆分每一行,替换第一个标记 </code> 中的左括号并替换第二个标记 <code>
中的右括号,然后使用值它们各自的标记 </code> 和 <code>
在您使用 print
您的输入数据文件的格式是(VALUE1 VALUE2).
。你先去掉开头的(
,后面的).
有很多方法可以做到这一点,这里是一个
sed 's/(//g' yourfile | sed 's/).//g'
然后您可以将其传递给 awk
。这里</code>对应第一列,<code>
对应第二列:
sed 's/(//g' yourfile | sed 's/).//g' | awk '{print "0.0.0.0/rep/com/bla/blub/""/""/""-"".zip"}'
我会为此使用 sed
:
sed $'s,^[ \t]*\([^ \t]*\)[ \t][ \t]*\([^ \t]*\).*$,0.0.0.0/rep/com/bla/blub///-.zip,' filename >new-filename
如果您愿意,可以通过添加 -i.bak
就地修改原始文件:sed -i.bak $'s,
...,'
.