我有一堆bash函数,我想转换成markdown代码块。例如,其中一个是这样的:(函数内部可能有一些嵌套的花括号和空行)
upr()
{
for chr; do
case $chr in
[a-z]*) chr_opts="-n" nxt -32 "$chr" ;;
*) printf "%c${sep}" "$chr" 2>/dev/null ;;
esac
done
}
我想这样修改:
```bash
upr()
{
for chr; do
case $chr in
[a-z]*) chr_opts="-n" nxt -32 "$chr" ;;
*) printf "%c${sep}" "$chr" 2>/dev/null ;;
esac
done
}
```
我的想法是将函数定义(作为段落处理)放入sed保持空间并添加标记。我如何使用sed、awk或perl或任何方法来做到这一点?
与declare -fp func
?
$ myFuncs=( foo bar qux )
$ for f in "${myFuncs[@]}"; do
printf '```bashn'; declare -fp "$f"; printf '```nn'
done
```bash
foo ()
{
echo "I am function foo"
}
```
```bash
bar ()
{
echo "I am function bar"
}
```
```bash
qux ()
{
echo "I am function qux"
}
```
对于多行函数
funcname()
{
....
}
$ awk '/()/{print "```bash"}{ print }/^}$/{print "```"}' input_file
```bash
upr()
{
for chr; do
case $chr in
[a-z]*) chr_opts="-n" nxt -32 "$chr" ;;
*) printf "%c${sep}" "$chr" 2>/dev/null ;;
esac
done
}
```
```bash
func2()
{
foo="bar"
while :; do
echo ${#foo}
sleep 5
done
}
```
```bash
func3()
{
foo=2 bar=1
echo "${foo}" "$bar"
}
```
Save changes inplace
$ awk -i inplace '/()/{printf "```bashn"}{ print }/^}$/{print "```"}' input_file
这可能适合您(GNU sed):
sed -e '/^S+s*()/!b;i```bash' -e ':a;n;/^}/!ba;a```' file
在函数前插入``` bash
,在函数后附加```
。