我有一堆 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 或任何其他方法來做到這一點?
uj5u.com熱心網友回復:
與declare -fp func?
$ myFuncs=( foo bar qux )
$ for f in "${myFuncs[@]}"; do
printf '```bash\n'; declare -fp "$f"; printf '```\n\n'
done
```bash
foo ()
{
echo "I am function foo"
}
```
```bash
bar ()
{
echo "I am function bar"
}
```
```bash
qux ()
{
echo "I am function qux"
}
```
uj5u.com熱心網友回復:
對于多行函式
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"
}
```
就地保存更改
$ awk -i inplace '/\(\)/{printf "```bash\n"}{ print }/^}$/{print "```"}' input_file
uj5u.com熱心網友回復:
這可能對您有用(GNU sed):
sed -e '/^\S\ \s*()/!b;i\```bash' -e ':a;n;/^}/!ba;a\```' file
在函式之前插入 ``` bash并在它之后追加```。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/494029.html
