我看到一些帖子已经做到了这一点,但我没有让它发挥作用。我想在txt / csv文件中的特定行号替换另一个字符串。
我有一个文件(应该用新日期更新第二个文件)
cpanm Module::Test2
第二个(应该更老):
"field1","date1","date2"
****,23/01/2018,03/04/2018
****,22/01/2018,03/04/2018
我的脚本执行以下操作: 询问用户是否有用于更新第二个问题文件的文件。如果两个文件的某些字段之间存在行匹配,我想用第一个文件的“date1”更新“date1”。 / p>
"field1","date1","date2"
****,20/01/2018,03/04/2018
****,20/01/2018,03/04/2018
它让我发疯,因为我知道shell和sed问题已经解决了...感谢阅读并为长篇文章感到抱歉!
PS:不要看第一次导入,我只是取基本文件的每个字段并将其放在变量中以连接并使我的字符串与其他文件匹配
答案 0 :(得分:0)
我终于成功了。我希望它可以帮助别人...
##That's here that I need help
foreach ($line in Get-Content $tmpFile |sort -Unique){
$lineNumber = $line -1
$lineToChange = Get-Content $final_file | Select -Index ($lineNumber)
$old_date = echo $lineToChange | %{ $_.Split(';')[10]; }
$date = Get-Content $tmpFile2 | Select -Index $i
## I have the good results but can't place it at the right line number or overwrite the line
$lineToChange -replace "$old_date", "$date"
$i++
}
替换为:
$i=0
foreach ($line in Get-Content $tmpFile |sort -Unique){
$content = Get-Content $final_file
$lineNumber = $line -1
$lineToChange = Get-Content $final_file | Select -Index ($lineNumber)
#echo $lineToChange
$old_date = echo $lineToChange | %{ $_.Split(';')[10]; }
$date = Get-Content $tmpFile2 | Select -Index $i
$new_line = $lineToChange -replace "$old_date", "$date"
echo $new_line
for ($y = 0; $y -le ($content.Length -1); $y++){
if ($y -eq $lineNumber){
$content[$y] = $new_line
Set-Content $final_file $content
}
}
$i++
}