【发布时间】:2020-12-09 22:22:00
【问题描述】:
背景
我有一个如下所示的文本文件:
$SomeText.element_[1]="MoreText[3]";\r"
$SomeText.element_[2]="MoreText[6]";\r"
$SomeText.element_[3]="MoreText[2]";\r"
$SomeText.element_[4]="MoreText[1]";\r"
$SomeText.element_[5]="MoreText[5]";\r"
这持续了超过一千行。我想做以下事情:
$SomeText.element_[0]="MoreText[3]";\r"
$SomeText.element_[1]="MoreText[6]";\r"
$SomeText.element_[2]="MoreText[2]";\r"
$SomeText.element_[3]="MoreText[1]";\r"
$SomeText.element_[4]="MoreText[5]";\r"
文件中的每一行文本都应将最左边的索引减一,其余文本保持不变。
尝试的解决方案
到目前为止,我已经尝试了以下...但对我来说问题是我不知道如何正确地将其反馈到文件中:
尝试 1
我尝试了双重切割技术:
cat file.txt | cut -d '[' -f2 | cut -d ']' -f1 | xargs -I {} expr {} + 1
这会正确地将所有减一的索引输出到命令行。
尝试 2
我尝试将 awk 与 sed 混合使用,但这导致机器挂起:
awk -F'[' '{printf("%d\n", $2-1)}' file.txt | xargs -I {} sed -i 's/\[\d+\]/{}/g' file.txt
问题
如何正确地将文件中的所有数组索引减一并将减量后的索引正确写入文本文件的正确位置?
【问题讨论】:
-
请注意
\d不受sed支持,另请参阅 Why does my regular expression work in X but not in Y?
标签: awk sed substitution cat xargs