我正在读取包含此数据的文件名:
2017-03-23
2018-01-23
2017-07-31
我想读取每一行并用空格替换连字符。鉴于上面的例子,我应该得到以下结果:
2017 03 23
2018 01 23
2017 07 31
这是我的代码:
#!/bin/sh
filename=extract_dates.dat
line=1
totline=`wc -l < $filename`
while [ $line -le $totline ]
do
date=`sed -n -e ''"$line"'p' $filename | awk '{print $line}'`
echo $date
test=`sed 's/([0-9])-([0-9])/\1\2/g' $date`
echo $test
line=`expr $line + 1`
done
我收到以下错误:
sed: 1: "s/([0-9])-([0-9])/\1\2/g": \1 not defined in the RE
答案 0 :(得分:1)
您不需要明确的计数器或sed
或awk
; bash
本身可以解决这个问题。 (你使用awk
,尤其不会做任何事情。)
filename=extract_dates.dat
while IFS=- read -r year month day; do
echo "Year: $year"
echo "Month: $month"
echo "Day: $day"
done < "$filename"
答案 1 :(得分:1)
tr将用空格替换连字符,例如:
test=$(echo $date | tr "-" " ")
答案 2 :(得分:0)
这个怎么样:
import UIKit
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
let documents = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
if let url = URL(string: "https://i.stack.imgur.com/xnZXF.jpg") {
URLSession.shared.downloadTask(with: url) { location, response, error in
guard let location = location else {
print("download error:", error ?? "")
return
}
// move the downloaded file from the temporary location url to your app documents directory
do {
try FileManager.default.moveItem(at: location, to: documents.appendingPathComponent(response?.suggestedFilename ?? url.lastPathComponent))
} catch {
print(error)
}
}.resume()
}
如果您想使用tr '-' ' ' < filename > output
,也可以使用它。你的sed
命令不起作用的原因是你需要逃避你的副手。试试这个:
sed