Search code examples
stringbashmarkdownmarkup

Bash string operation


I am trying to translate markdown file into confluence markup as a complete beginner. I need to make [Title](https:// site.com) into [Title|https:// site.com]. If it was just one link, i could add it to a var and printf it, but I am having trouble figuring out how to do it if I have 10 links for example. Previously I used CONTENT=$(echo "${CONTENT//# /h1. }") to replace strings but since now every string is different, I am stuck at how to solve this. I found the solution written in javascript: http://chunpu.github.io/markdown2confluence/browser but fail to understand how to do it in bash.


Solution

  • For this test file

    $ cat file
    [Title](https://site1.com)
    [Title](https://site2.com)
    [Title](https://site3.com)
    [Title](https://site4.com)
    [Title](https://site5.com)
    [Title](https://site6.com)
    [Title](https://site7.com)
    [Title](https://site8.com)
    [Title](https://site9.com)
    [Title](https://site10.com)
    

    Sed variant:

    $ sed 's/\](/|/;s/)/\]/' file
    [Title|https://site1.com]
    [Title|https://site2.com]
    [Title|https://site3.com]
    [Title|https://site4.com]
    [Title|https://site5.com]
    [Title|https://site6.com]
    [Title|https://site7.com]
    [Title|https://site8.com]
    [Title|https://site9.com]
    [Title|https://site10.com]
    

    Bash variant:

    while read -r line; do
        line=${line//](/|}
        line=${line//)/]}
        echo $line
    done < file
    [Title|https://site1.com]
    [Title|https://site2.com]
    [Title|https://site3.com]
    [Title|https://site4.com]
    [Title|https://site5.com]
    [Title|https://site6.com]
    [Title|https://site7.com]
    [Title|https://site8.com]
    [Title|https://site9.com]
    [Title|https://site10.com]
    

    Awk variant:

    $ awk '{ sub(/\]\(/, "|"); sub(/\)/, "]"); print }' file
    [Title|https://site1.com]
    [Title|https://site2.com]
    [Title|https://site3.com]
    [Title|https://site4.com]
    [Title|https://site5.com]
    [Title|https://site6.com]
    [Title|https://site7.com]
    [Title|https://site8.com]
    [Title|https://site9.com]
    [Title|https://site10.com]