Regex 使用bash查找并格式化500多个readme.md文件中的字符串
我正在做一个项目,我正在整理500多个自述文件。每个文件都包含以下内容(包括空格),我想为该任务创建一个bash脚本。我成功地使用bash从数据中创建了所有自述文件,但我在试图找到使用Regex 使用bash查找并格式化500多个readme.md文件中的字符串,regex,bash,sed,grep,Regex,Bash,Sed,Grep,我正在做一个项目,我正在整理500多个自述文件。每个文件都包含以下内容(包括空格),我想为该任务创建一个bash脚本。我成功地使用bash从数据中创建了所有自述文件,但我在试图找到使用sed、grep和regexs来实现这一点时遇到了困难 文件现在的样子: "1.0.0": "text1" "1.1.15": "text2" "2.1.2": "text3" "4.55.3a": "text4" **v4.55.3a** - text 4 **v2.1.2** - text
sed
、grep
和regexs
来实现这一点时遇到了困难
文件现在的样子:
"1.0.0": "text1"
"1.1.15": "text2"
"2.1.2": "text3"
"4.55.3a": "text4"
**v4.55.3a**
- text 4
**v2.1.2**
- text 3
**v1.1.15**
- text 2
**v1.0.0**
- text 1
f=$(find . -type f -name README.md)
for item in $f; do
#format version
#format string
done
我希望它看起来像什么:
"1.0.0": "text1"
"1.1.15": "text2"
"2.1.2": "text3"
"4.55.3a": "text4"
**v4.55.3a**
- text 4
**v2.1.2**
- text 3
**v1.1.15**
- text 2
**v1.0.0**
- text 1
f=$(find . -type f -name README.md)
for item in $f; do
#format version
#format string
done
BASH脚本(这将格式化文件中的字符串):
"1.0.0": "text1"
"1.1.15": "text2"
"2.1.2": "text3"
"4.55.3a": "text4"
**v4.55.3a**
- text 4
**v2.1.2**
- text 3
**v1.1.15**
- text 2
**v1.0.0**
- text 1
f=$(find . -type f -name README.md)
for item in $f; do
#format version
#format string
done
因此,我正在寻找一些帮助,以建立一个脚本,将格式的内容。谢谢大家的意见
更新输入文件中除了第一行以外的所有行都是缩进的吗?
-有些是,有些不是。
您真的希望输出中包含**中的版本号吗?
-是的,它用于github标记。
看起来您希望输出文件按版本号降序排列,对吗?
-对 输入和输出格式与问题中当前指定的格式完全相同:
tac "$item" | awk -F\" '{ printf "**v%s**\n - %s\n", $2, $4 }' > "/tmp/$item" &&
mv "/tmp/$item" "$item"
注:
- 这假设简单地反转输入顺序就足以获得所需的输出排序[因为OP已确认]-如果需要真正的排序,则会变得更复杂
(
)sort-t-r-b-n-k1.2,1-k2,2-k3,3“$item”
- 在OSX上,使用
而不是tail-r
tac
为…解析命令输出。。。例如,在
中,这将与带有嵌入空格的路径断开
更可靠的解决方案是读入阵列:
我猜你喜欢这样的一些:
sort -r -k1 file | awk -F\" '{print "**v"$2"**\n -"$4"\n"}'
**v4.55.3a**
-text4
**v2.1.2**
-text3
**v1.1.15**
-text2
**v1.0.0**
-text1
它根据版本号对数据进行反向排序,然后分组打印。
tac
不按版本号排序,只需反向排序即可<代码>看起来您希望输出文件按版本号降序排列,对吗?-对代码>此外,简单地反转输入是否足以获得正确的输出顺序?是。@SJAndersonLA:刚刚更新了答案,说明了重新格式化后如何替换输入文件| tee-test.md1
输出到标准输出和文件test.md1
。sort
命令无法正常工作;添加-b
将有助于处理前导空格,但这仍然无法执行真正的版本号排序。要使其正常工作,您需要有点拜占庭式的sort-t-r-b-n-k1.2,1-k2,2-k3,3文件