文件中groupAfiles.txt
包括以下行:
file14
file2
file4
file9
我需要一种方法来将它们转换为删除file
和添加/dev/loop
,并将它们放在一行中,并且它们之间有一个空格。
/dev/loop14 /dev/loop2 /dev/loop4 /dev/loop9
然后我需要将其放入数组中。
(但数字会改变)
我该如何做?
1
最佳答案
3
将原始名称读入数组:
readarray -t names <groupAfiles.txt
将初始file
前缀替换为/dev/loop
:
names=( "${names[@]/#file//dev/loop}" )
如果存在前缀字符串,则这里使用的替换将用字符串替换数组file
中每个元素开头的字符串。names
/dev/loop
显示元素之间带有空格的结果数组(假设 shell 变量IFS
具有其默认值):
printf '%s\n' "${names[*]}"
测试:
$ cat groupAfiles.txt
file14
file2
file4
file9
$ readarray -t names <groupAfiles.txt
$ names=( "${names[@]/#file//dev/loop}" )
$ printf '%s\n' "${names[*]}"
/dev/loop14 /dev/loop2 /dev/loop4 /dev/loop9
|
为此,awk
您可以使用如下命令:
awk '{gsub("file",""); printf "/dev/loop%s ", $0}' input_file
或者
awk '{gsub("file","/dev/loop"); printf "%s ", $0}' input_file
它用空值替换file
,然后打印/dev/loop
与数字/字符串连接的内容
要添加数组,您可以使用:
array=( $(awk '{gsub("file",""); printf "/dev/loop%s ", $0}' input_file) )
|
只需将其读入数组,然后按照你喜欢的方式以空格分隔打印即可:
$ readarray -t files < <(sed 's:file:/dev/loop:' groupAfiles.txt)
$ declare -p files
declare -a files=([0]="/dev/loop14" [1]="/dev/loop2" [2]="/dev/loop4" [3]="/dev/loop9")
$ printf '%s\n' "${files[*]}"
/dev/loop14 /dev/loop2 /dev/loop4 /dev/loop9
|
–
♦
|