-2

In my Ubuntu directory I fave files containing \f.

I would like to change \f into \f 1:2. in those files,

according to chapter \c 1 and line number \v 2.

Input:

\id
\h
\toc2
\c 1
\p
\v 1 RandomText
\v 2 RandomText\f RandomText
\v 3 RandomText\f RandomText\f RandomText
\v 4 RandomText
\p
\v 5 RandomText\f RandomText
\c 2
\p
\v 1 RandomText
\v 2 RandomText\f 
\v 3 RandomText\f RandomText
\c 3
\p
\v 1 RandomText\f RandomText\f RandomText
\v 2 RandomText
\v 3 RandomText\f
...

Desired output:

\id
\h
\toc2
\c 1
\p
\v 1 RandomText
\v 2 RandomText\f 1:2. RandomText
\v 3 RandomText\f 1:3. RandomText\f 1:3. RandomText
\v 4 RandomText
\p
\v 5 RandomText\f 1:5. RandomText
\c 2
\p
\v 1 RandomText
\v 2 RandomText\f 2:2. 
\v 3 RandomText\f 2:3. RandomText
\c 3
\p
\v 1 RandomText\f 3:1. RandomText\f 3:1. RandomText
\v 2 RandomText
\v 3 RandomText\f 3:3.

1 Answers1

0

Well, I managed to make a bash script to do these replacements for \f and also for \x (those were not in question above) with some more adds.

#!/bin/bash
rm loop*.txt >/dev/null 2>&1
cp Loop.txt loopf.txt

# ======= ZAMENJA vse \ PO DATOTEKI, DA NE DELAJO TEZAV ========
sed -i "s/^\\\\/YCY/g"  loopf.txt   # Prvi znak v vrstici  Column
sed -i "s/\\\\f /YFY/g" loopf.txt   # Opombe               Footnotes            
sed -i "s/\\\\x /YRY/g" loopf.txt   # Reference            Reference
sed -i "s/\\\\/YAY/g"   loopf.txt   # še preostale \ v datoteki spremenim
#===============================================================


#================================================================
#      OPOMBE    \f + \fr 1:1 \ft [Leta Gospodovega 96.]\f*
#================================================================


# ========= VNESE STEVILKE POGLAVIJ IN JIH ZAPISE V FAJL  ======
        # Isce stevilek poglavij in si jih potem zapomni
    regex_c="YCYc [0-9]"
        # Prebere datoteko ki je spodaj pod DONE 
    while read line
    do
          # Ce ustreza regex_c pogoju    \c 88  ali  YCYc 88
      if [[ $line =~ $regex_c ]]
      then
             # Vsako ne-spremenjeno vrstico posebej zapise v datoteko
         echo $line >> loopf1.txt
             # Zapomni si stevilko poglavja
         regex_c_catch=$line
                       #   echo "regex_c_catch=$regex_c_catch"
      else
             # Iz trenutne vrstice izvlece stevilko vrstice
         num_line_c=$(echo "$regex_c_catch" |colrm 9 |grep -o -E '[0-9]+')
                       #   echo "num_line_c=$num_line_c"
                       #   Vnese stevilko chapterja in pripravi prostor za svetilko vrstice YVY
         line1=`echo $line  | sed -e "s/YFY/YF1Y$num_line_c\YVY /"`
         line2=`echo $line1 | sed -e "s/YFY/YF2Y$num_line_c\YVY /"`
         line3=`echo $line2 | sed -e "s/YFY/YF3Y$num_line_c\YVY /"`
         line4=`echo $line3 | sed -e "s/YFY/YF4Y$num_line_c\YVY /"`
             # Vsako spremenjeno vrstico posebej zapise v datoteko
         echo $line4 >> loopf1.txt
      fi
    done <  "loopf.txt"
#=================================================================

# ======= ZAMENJA NAZAJ IN \ OHRANI KOT YFY =========== ========
sed -i "s/YF1Y/YFYf + YFYfr /g" loopf1.txt
sed -i "s/YF2Y/YFYf + YFYfr /g" loopf1.txt
sed -i "s/YF3Y/YFYf + YFYfr /g" loopf1.txt
sed -i "s/YF4Y/YFYf + YFYfr /g" loopf1.txt
#===============================================================


# ========= VNESE STEVILKE VRSTIC IN JIH ZAPISE V FAJL  ==========
         # Isce stevilke vrstic in si jih potem zapomni
         # YCYv 1
         regex_v="YCYv [0-9]"

         # Prebere datoteko ki je spodaj pod DONE 
         while read line
         do
           # Ce ustreza regex_v pogoju    \v 188  ali  YCYv 188
           if [[ $line =~ $regex_v ]]
           then
                    # Izvlece samo stevilko vrstice
                    NumRegexV=$(echo "$line" |colrm 9 |grep -o -E '[0-9]+')
                    LineV1=`echo $line   | sed -e "s/YVY/YF1Y$NumRegexV YFYft/"`
                    LineV2=`echo $LineV1 | sed -e "s/YVY/YF1Y$NumRegexV YFYft/"`
                    LineV3=`echo $LineV2 | sed -e "s/YVY/YF1Y$NumRegexV YFYft/"`
                    LineV4=`echo $LineV3 | sed -e "s/YVY/YF1Y$NumRegexV YFYft/"`
              # Vsako spremenjeno vrstico posebej zapise v datoteko
              echo $LineV4 >> loopf2.txt
            else
              # Vsako ne-spremenjeno vrstico posebej zapise v datoteko
          echo $line   >> loopf2.txt
           fi
         done <  "loopf1.txt"
#=================================================================


# ======= ZAMENJA NAZAJ vse \ PO DATOTEKI ========
sed -i "s/YF1Y/:/g"      loopf2.txt
sed -i "s/YF2Y/:/g"      loopf2.txt
sed -i "s/YF3Y/:/g"      loopf2.txt
sed -i "s/YF4Y/:/g"      loopf2.txt
#===============================================================




#================================================================
#        REFERENCE    \x - \xr 1:4 \xt 1 Kor 15:21; Kol 1:18\x*
#================================================================

# === Zacne se z referencami in uporabi fajl od footnotesov =====
cp loopf2.txt loopr.txt
# ===============================================================

# ========= VNESE STEVILKE POGLAVIJ IN JIH ZAPISE V FAJL  ======
        # Isce stevilek poglavij in si jih potem zapomni
    regex_c="YCYc [0-9]"
        # Prebere datoteko ki je spodaj pod DONE 
    while read line
    do
          # Ce ustreza regex_c pogoju    \c 88  ali  YCYc 88
      if [[ $line =~ $regex_c ]]
      then
             # Vsako ne-spremenjeno vrstico posebej zapise v datoteko
         echo $line >> loopr1.txt
             # Zapomni si stevilko poglavja
         regex_c_catch=$line
                       #   echo "regex_c_catch=$regex_c_catch"
      else
             # Iz trenutne vrstice izvlece stevilko vrstice
         num_line_c=$(echo "$regex_c_catch" |colrm 9 |grep -o -E '[0-9]+')
                       #   echo "num_line_c=$num_line_c"
                       #   Vnese stevilko chapterja in pripravi prostor za svetilko vrstice YWY
         line1=`echo $line  | sed -e "s/YRY/YR1Y$num_line_c\YWY /"`
         line2=`echo $line1 | sed -e "s/YRY/YR2Y$num_line_c\YWY /"`
         line3=`echo $line2 | sed -e "s/YRY/YR3Y$num_line_c\YWY /"`
         line4=`echo $line3 | sed -e "s/YRY/YR4Y$num_line_c\YWY /"`
             # Vsako spremenjeno vrstico posebej zapise v datoteko
         echo $line4 >> loopr1.txt
      fi
    done <  "loopr.txt"
#=================================================================

# ======= ZAMENJA NAZAJ vse \ PO DATOTEKI ========
sed -i "s/YR1Y/YFYx - YFYxr /g" loopr1.txt
sed -i "s/YR2Y/YFYx - YFYxr /g" loopr1.txt
sed -i "s/YR3Y/YFYx - YFYxr /g" loopr1.txt
sed -i "s/YR4Y/YFYx - YFYxr /g" loopr1.txt
#===============================================================


# ========= VNESE STEVILKE VRSTIC IN JIH ZAPISE V FAJL  ==========
         # Isce stevilke vrstic in si jih potem zapomni
         # YCYv 1
         regex_v="YCYv [0-9]"

         # Prebere datoteko ki je spodaj pod DONE 
         while read line
         do
           # Ce ustreza regex_v pogoju    \v 188  ali  YCYv 188
           if [[ $line =~ $regex_v ]]
           then
                    # Izvlece samo stevilko vrstice
                    NumRegexV=$(echo "$line" |colrm 9 |grep -o -E '[0-9]+')
                    LineV1=`echo $line   | sed -e "s/YWY/YR1Y$NumRegexV YFYxt/"`
                    LineV2=`echo $LineV1 | sed -e "s/YWY/YR1Y$NumRegexV YFYxt/"`
                    LineV3=`echo $LineV2 | sed -e "s/YWY/YR1Y$NumRegexV YFYxt/"`
                    LineV4=`echo $LineV3 | sed -e "s/YWY/YR1Y$NumRegexV YFYxt/"`
              # Vsako spremenjeno vrstico posebej zapise v datoteko
              echo $LineV4 >> loopr2.txt
            else
              # Vsako ne-spremenjeno vrstico posebej zapise v datoteko
          echo $line   >> loopr2.txt
           fi
         done <  "loopr1.txt"
#=================================================================


# ======= ZAMENJA NAZAJ vse \ PO DATOTEKI ========
sed -i "s/YCY/\x5c/g"    loopr2.txt
sed -i "s/YRY/ \x5cx/g" loopr2.txt         # odstrnail presledek
sed -i "s/YR1Y/:/g"      loopr2.txt
sed -i "s/YR2Y/:/g"      loopr2.txt
sed -i "s/YR3Y/:/g"      loopr2.txt
sed -i "s/YR4Y/:/g"      loopr2.txt
sed -i "s/YFY/\x5c/g"    loopr2.txt  # Final replacement  YFY -> \ 
sed -i "s/YAY/\x5c/g"    loopr2.txt  # Final replacement  YAY -> \
#=====================================================================


echo -E " "
cat loopr2.txt

Real input is:

...
\c 1
...
\v 1 Razodetje\f [Leta Gospodovega 96.]\f* Jezusa...
...
\v 5 priča\x  1 Kor 15:21; Kol 1:18\x* \add in\add* prvorojenec ... krvi\x  Heb 9:14\x* umil...
...
\c 2
...
\v 14 drže\x  4 Mz 25\x* Bileámovega
...
\c 3
...
\v 14 Laodikejcev\f Laodikejcev: ali, v Laodikeji.\f* piši
...

And the result is:

...
\c 1
...
\v 1 Razodetje\f + \fr 1:1 \ft [Leta Gospodovega 96.]\f* Jezusa
...
\v 5 priča\x - \xr 1:5 \xt 1 Kor 15:21; Kol 1:18\x* \add in\add* prvorojenec ... krvi\x - \xr 1:5 \xt Heb 9:14\x* umil...
...
\c 2
...
\v 14 drže\x - \xr 2:14 \xt 4 Mz 25\x* Bileámovega
...
\c 3
...
\v 14 Laodikejcev\f + \fr 3:14 \ft Laodikejcev
...

And I found out there is a little macro in the XeTeX code \reference that turns into the current chapter:verse.

I should look at it, besause my script is quite slow.

"\\f + " > "\\f + \\fr \\reference "