您好,我正在嘗試撰寫 unix 腳本/命令,我必須在其中列出給定目錄中的所有檔案名,檔案名格式為 string-{number}.txt(eg: filename-1.txt,filename-2.txt)形成一個json物件。任何指標都會有所幫助。
[{
"filenumber": "1",
"name": "filename-1.txt"
},
{
"filenumber": "2",
"name": "filename-2.txt"
}
]
在上面的 json file-number 應該從每個檔案名的 {number} 格式中讀取
uj5u.com熱心網友回復:
對 jq 的一次呼叫就足夠了:
shopt -s extglob
printf "%s\0" *- ([0-9]).txt | \
jq -sR 'split("\u0000") |
map({filenumber:capture(".*-(?<n>.*)\\.txt").n,
name:.})'
uj5u.com熱心網友回復:
命令列工具非常簡單 西德爾 及其集成的 EXPath 檔案模塊:
$ xidel -se '
array{
for $x in file:list(.,false(),"*.txt")
return {
"filenumber":extract($x,"(\d )\.txt",1),
"name":$x
}
}
'
uj5u.com熱心網友回復:
直觀地說,我會說你可以用jq. 然而,在實踐中,我很少能夠實作我想要的jq:-)
午休時有些困惑,我想出了這個美麗:
ls | jq -R '{filenumber:input_line_number, name:.}' | jq -s .
ls您可以使用任何其他生成換行符分隔的字串串列的命令來代替。
uj5u.com熱心網友回復:
我已經嘗試了多個示例來實作我的確切用例,最后發現這正是我想要的效果,謝謝
for file in $(ls *.txt); do file_version=$(echo $file | sed 's/\(^.*-\)\(.*\)\(.txt.*$\)/\2/'); jq -n --arg name "$file_version" --arg path "$file" '{name: $name, name: $path}'; done | jq -n '.urls |= [inputs]'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/317391.html
上一篇:使用sed替換分號后的符號
