<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://swarm.cs.pub.ro/~razvan/wiki/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://swarm.cs.pub.ro/~razvan/wiki/feed.php">
        <title>Razvan's wiki school:uso:labs</title>
        <description></description>
        <link>https://swarm.cs.pub.ro/~razvan/wiki/</link>
        <image rdf:resource="https://swarm.cs.pub.ro/~razvan/wiki/lib/tpl/dokuwiki/images/favicon.ico" />
       <dc:date>2026-04-18T04:25:02+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://swarm.cs.pub.ro/~razvan/wiki/school/uso/labs/shell_scripting_2?rev=1595225815&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://swarm.cs.pub.ro/~razvan/wiki/lib/tpl/dokuwiki/images/favicon.ico">
        <title>Razvan's wiki</title>
        <link>https://swarm.cs.pub.ro/~razvan/wiki/</link>
        <url>https://swarm.cs.pub.ro/~razvan/wiki/lib/tpl/dokuwiki/images/favicon.ico</url>
    </image>
    <item rdf:about="https://swarm.cs.pub.ro/~razvan/wiki/school/uso/labs/shell_scripting_2?rev=1595225815&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-07-20T09:16:55+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Laborator shell scripting - partea a 2-a</title>
        <link>https://swarm.cs.pub.ro/~razvan/wiki/school/uso/labs/shell_scripting_2?rev=1595225815&amp;do=diff</link>
        <description>&lt;pre&gt;
@@ -1,114 +1,114 @@
- = Laborator shell scripting - partea a 2-a =
+ ====== Laborator shell scripting - partea a 2-a ======
  
- == Elemente importante ==
+ ===== Elemente importante =====
  
- * variabile de mediu
- * source
- * globbing
- * find
- * expresii regulate
- * grep
- * sort, uniq
- * read
- * sed
- * awk
+   *  variabile de mediu
+   *  source
+   *  globbing
+   *  find
+   *  expresii regulate
+   *  grep
+   *  sort, uniq
+   *  read
+   *  sed
+   *  awk
  
- == Seturi de task-uri ==
+ ===== Seturi de task-uri =====
  
- === variabile de mediu, source ===
+ ==== variabile de mediu, source ====
  
- Intrați în directorul &amp;#039;&amp;#039;lab11/ex01/&amp;#039;&amp;#039;
+ Intrați în directorul &amp;#039;&amp;#039;lab12/ex01/&amp;#039;&amp;#039;
  
  ==== Tutorial ===
  
- * Rulați comenzile de mai jos pentru afișarea valorii variabilelor de mediu &amp;#039;&amp;#039;PATH&amp;#039;&amp;#039; și &amp;#039;&amp;#039;HOME&amp;#039;&amp;#039;:
+   *  Rulați comenzile de mai jos pentru afișarea valorii variabilelor de mediu &amp;#039;&amp;#039;PATH&amp;#039;&amp;#039; și &amp;#039;&amp;#039;HOME&amp;#039;&amp;#039;:
  
  {{{
  echo $PATH
  echo $HOME
  }}}
  
- * Rulați comenzile de mai jos pentru inițializarea și afișarea unei variabile (**nu** folosiți spații înainte sau după caracterul egal (&amp;#039;&amp;#039;=&amp;#039;&amp;#039;)):
+   *  Rulați comenzile de mai jos pentru inițializarea și afișarea unei variabile (**nu** folosiți spații înainte sau după caracterul egal (&amp;#039;&amp;#039;=&amp;#039;&amp;#039;)):
  
  {{{
  MY_VAR=$HOME/alfanumeric
  echo $MY_VAR
  }}}
  
- * Urmăriți conținutul scriptului &amp;#039;&amp;#039;show_var.sh&amp;#039;&amp;#039;:
+   *  Urmăriți conținutul scriptului &amp;#039;&amp;#039;show_var.sh&amp;#039;&amp;#039;:
  
  {{{
  cat show_var.sh
  }}}
  
- * Rulați scriptul:
+   *  Rulați scriptul:
  
  {{{
  ./show_var.sh
  }}}
  
- * **Doar** varibilele de mediu sunt propagate la procesele copil. Folosiți &amp;#039;&amp;#039;export&amp;#039;&amp;#039;:
+   *  **Doar** varibilele de mediu sunt propagate la procesele copil. Folosiți &amp;#039;&amp;#039;export&amp;#039;&amp;#039;:
  
  {{{
  export MY_VAR
  ./show_var.sh
  }}}
  
- ==== Enunț ====
+ === Enunț ===
  
  Creați un script &amp;#039;&amp;#039;update_path.sh&amp;#039;&amp;#039; care să actualizeze variabila de mediu &amp;#039;&amp;#039;PATH&amp;#039;&amp;#039; cu directorul &amp;#039;&amp;#039;bin/&amp;#039;&amp;#039; din home-ul utilizatorului curent. Rulați scriptul pentru a actualiza valoarea variabilei în shell-ul curent.
  
- ==== Pași ajutători ====
+ === Pași ajutători ===
  
- * Actualizați variabila de mediu &amp;#039;&amp;#039;PATH&amp;#039;&amp;#039; cu directorul &amp;#039;&amp;#039;/opt/bin&amp;#039;&amp;#039;. Afișați valoarea variabilei.
- * Creați un script &amp;#039;&amp;#039;update_path.sh&amp;#039;&amp;#039; care să actualizeze variabila de mediu &amp;#039;&amp;#039;PATH&amp;#039;&amp;#039; cu directorul &amp;#039;&amp;#039;bin/&amp;#039;&amp;#039; din home-ul utilizatorului curent. Folosiți &amp;#039;&amp;#039;export&amp;#039;&amp;#039; pentru exportarea variabilei.
- * Rulați scriptul și afișați valoarea variabilei &amp;#039;&amp;#039;PATH&amp;#039;&amp;#039;. De ce nu se modifică valoarea?
- * Folosiți source pentru a rula scriptul. Afișați valoarea variabilei &amp;#039;&amp;#039;PATH&amp;#039;&amp;#039;.
+   *  Actualizați variabila de mediu &amp;#039;&amp;#039;PATH&amp;#039;&amp;#039; cu directorul &amp;#039;&amp;#039;/opt/bin&amp;#039;&amp;#039;. Afișați valoarea variabilei.
+   *  Creați un script &amp;#039;&amp;#039;update_path.sh&amp;#039;&amp;#039; care să actualizeze variabila de mediu &amp;#039;&amp;#039;PATH&amp;#039;&amp;#039; cu directorul &amp;#039;&amp;#039;bin/&amp;#039;&amp;#039; din home-ul utilizatorului curent. Folosiți &amp;#039;&amp;#039;export&amp;#039;&amp;#039; pentru exportarea variabilei.
+   *  Rulați scriptul și afișați valoarea variabilei &amp;#039;&amp;#039;PATH&amp;#039;&amp;#039;. De ce nu se modifică valoarea?
+   *  Folosiți source pentru a rula scriptul. Afișați valoarea variabilei &amp;#039;&amp;#039;PATH&amp;#039;&amp;#039;.
  
- === find, globbing ===
+ ==== find, globbing ====
  
- * Intrați în directorul &amp;#039;&amp;#039;lab11/ex02/&amp;#039;&amp;#039;.
+   *  Intrați în directorul &amp;#039;&amp;#039;lab12/ex02/&amp;#039;&amp;#039;.
  
- ==== Tutorial ====
+ === Tutorial ===
  
- * Comanda &amp;#039;&amp;#039;&amp;#039;find&amp;#039;&amp;#039;&amp;#039; afișează ierahia unui director. Dacă directorul lipsește se consideră implicit directorul curent (&amp;#039;&amp;#039;.&amp;#039;&amp;#039;). Rulați comanda de mai jos pentru a afișa intrările din ierarhia curentă (&amp;#039;&amp;#039;.&amp;#039;&amp;#039;):
+   *  Comanda &amp;#039;&amp;#039;&amp;#039;find&amp;#039;&amp;#039;&amp;#039; afișează ierahia unui director. Dacă directorul lipsește se consideră implicit directorul curent (&amp;#039;&amp;#039;.&amp;#039;&amp;#039;). Rulați comanda de mai jos pentru a afișa intrările din ierarhia curentă (&amp;#039;&amp;#039;.&amp;#039;&amp;#039;):
  
  {{{
  find .
  find
  }}}
  
- * Rulați comanda de mai jos pentru a afișa fișierele din ierahia curentă:
+   *  Rulați comanda de mai jos pentru a afișa fișierele din ierahia curentă:
  
  {{{
  find -type f
  }}}
  
- * Caracterul star (&amp;#039;&amp;#039;*&amp;#039;&amp;#039;) este folosit pentru a reprezenta orice șir de caractere (de la caracterul vid până la șirul infinit). Rulați comanda de mai jos pentru a afișa fișierele cu extensia &amp;#039;&amp;#039;.conf&amp;#039;&amp;#039; din &amp;#039;&amp;#039;/etc/&amp;#039;&amp;#039;.
+   *  Caracterul star (&amp;#039;&amp;#039;*&amp;#039;&amp;#039;) este folosit pentru a reprezenta orice șir de caractere (de la caracterul vid până la șirul infinit). Rulați comanda de mai jos pentru a afișa fișierele cu extensia &amp;#039;&amp;#039;.conf&amp;#039;&amp;#039; din &amp;#039;&amp;#039;/etc/&amp;#039;&amp;#039;.
  
  {{{
  ls /etc/*.conf
  }}}
  
- ==== Enunț ====
+ === Enunț ===
  
- * Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; pentru a identifica fișierele cu drept de execuție care **nu** au extensia &amp;#039;&amp;#039;.sh&amp;#039;&amp;#039; aflate în **subdirectoarele** directorului &amp;#039;&amp;#039;lab11/ex02&amp;#039;&amp;#039;.
+   *  Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; pentru a identifica fișierele cu drept de execuție care **nu** au extensia &amp;#039;&amp;#039;.sh&amp;#039;&amp;#039; aflate în **subdirectoarele** directorului &amp;#039;&amp;#039;lab12/ex02/&amp;#039;&amp;#039;.
  
- ==== Pași ajutători ====
+ === Pași ajutători ===
  
- * Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; pentru a afișa ierarhia din subdirectoare. (Hint: &amp;#039;&amp;#039;-mindepth&amp;#039;&amp;#039;)
- * Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; pentru a afișa fișierele din ierarhia din subdirectoare cu extensia &amp;#039;&amp;#039;.sh&amp;#039;&amp;#039;. (Hint: &amp;#039;&amp;#039;-name&amp;#039;&amp;#039;, &amp;#039;&amp;#039;-type&amp;#039;&amp;#039;)
- * Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; pentru a afișa fișierele din ierarhia din subdirectoare care **nu** au extensia &amp;#039;&amp;#039;.sh&amp;#039;&amp;#039;. (Hint: &amp;#039;&amp;#039;OPERATORS&amp;#039;&amp;#039; în pagina de manual)
- * Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; pentru a afișa fișierele din ierarhia din subdirectoare cu drept de execuție care **nu** au extensia &amp;#039;&amp;#039;.sh&amp;#039;&amp;#039;. (Hint: &amp;#039;&amp;#039;-perm&amp;#039;&amp;#039;)
+   *  Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; pentru a afișa ierarhia din subdirectoare. (Hint: &amp;#039;&amp;#039;-mindepth&amp;#039;&amp;#039;)
+   *  Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; pentru a afișa fișierele din ierarhia din subdirectoare cu extensia &amp;#039;&amp;#039;.sh&amp;#039;&amp;#039;. (Hint: &amp;#039;&amp;#039;-name&amp;#039;&amp;#039;, &amp;#039;&amp;#039;-type&amp;#039;&amp;#039;)
+   *  Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; pentru a afișa fișierele din ierarhia din subdirectoare care **nu** au extensia &amp;#039;&amp;#039;.sh&amp;#039;&amp;#039;. (Hint: &amp;#039;&amp;#039;OPERATORS&amp;#039;&amp;#039; în pagina de manual)
+   *  Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; pentru a afișa fișierele din ierarhia din subdirectoare cu drept de execuție care **nu** au extensia &amp;#039;&amp;#039;.sh&amp;#039;&amp;#039;. (Hint: &amp;#039;&amp;#039;-perm&amp;#039;&amp;#039;)
  
- === find, shell expansion ===
+ ==== find, shell expansion ====
  
- * Intrați în directorul &amp;#039;&amp;#039;lab11/ex03/&amp;#039;&amp;#039;.
+   *  Intrați în directorul &amp;#039;&amp;#039;lab12/ex03/&amp;#039;&amp;#039;.
  
- ==== Tutorial ====
+ === Tutorial ===
  
- * Construcția &amp;#039;&amp;#039;${parameter%word}&amp;#039;&amp;#039; (descrisă și [[http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html|aici]]) permite eliminarea din variabila descrisă de &amp;#039;&amp;#039;parameter&amp;#039;&amp;#039; a porțiunii finale descrisă de șirul &amp;#039;&amp;#039;word&amp;#039;&amp;#039;. Rulați exemplele de mai jos:
+   *  Construcția &amp;#039;&amp;#039;${parameter%word}&amp;#039;&amp;#039; (descrisă și [[http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html|aici]]) permite eliminarea din variabila descrisă de &amp;#039;&amp;#039;parameter&amp;#039;&amp;#039; a porțiunii finale descrisă de șirul &amp;#039;&amp;#039;word&amp;#039;&amp;#039;. Rulați exemplele de mai jos:
  
  {{{
  var=&amp;quot;ana_are_mere&amp;quot;
  echo ${var%_mere}
@@ -117,78 +117,78 @@
  var=&amp;quot;nebuchadnezzar&amp;quot;
  echo ${var%d*}
  }}}
  
- ==== Enunț ====
+ === Enunț ===
  
- * Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; și &amp;#039;&amp;#039;cp&amp;#039;&amp;#039; pentru a crea copii de lucru ale fișierelor de configurare de distribuție din ierarhia &amp;#039;&amp;#039;lab11/ex03/horde&amp;#039;&amp;#039;. Fișierele de distribuție au extensia &amp;#039;&amp;#039;.dist&amp;#039;&amp;#039; (de exemplu &amp;#039;&amp;#039;conf.php.dist&amp;#039;&amp;#039;); o copie de lucru este un fișier fără extensia &amp;#039;&amp;#039;.dist&amp;#039;&amp;#039; (de exemplu: &amp;#039;&amp;#039;conf.php&amp;#039;&amp;#039;).
+   *  Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; și &amp;#039;&amp;#039;cp&amp;#039;&amp;#039; pentru a crea copii de lucru ale fișierelor de configurare de distribuție din ierarhia &amp;#039;&amp;#039;lab12/ex03/horde/&amp;#039;&amp;#039;. Fișierele de distribuție au extensia &amp;#039;&amp;#039;.dist&amp;#039;&amp;#039; (de exemplu &amp;#039;&amp;#039;conf.php.dist&amp;#039;&amp;#039;); o copie de lucru este un fișier fără extensia &amp;#039;&amp;#039;.dist&amp;#039;&amp;#039; (de exemplu: &amp;#039;&amp;#039;conf.php&amp;#039;&amp;#039;).
  
- ==== Pași ajutători ====
+ === Pași ajutători ===
  
- * Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; pentru a afișa fișierele cu extensia &amp;#039;&amp;#039;.dist&amp;#039;&amp;#039; din ierahia &amp;#039;&amp;#039;lab11/ex03/horde&amp;#039;&amp;#039;. (Hint: &amp;#039;&amp;#039;-type&amp;#039;&amp;#039;, &amp;#039;&amp;#039;-name&amp;#039;&amp;#039;)
- * Folosiți &amp;#039;&amp;#039;for&amp;#039;&amp;#039;, &amp;#039;&amp;#039;find&amp;#039;&amp;#039; și &amp;#039;&amp;#039;ls -l&amp;#039;&amp;#039; pentru a afișa informații complete despre fișierele de mai sus.
- * Inițializați variabila &amp;#039;&amp;#039;MY_FILE&amp;#039;&amp;#039; la valoarea &amp;#039;&amp;#039;conf.php.dist&amp;#039;&amp;#039;. Folosiți &amp;#039;&amp;#039;echo&amp;#039;&amp;#039; și construcția &amp;#039;&amp;#039;${parameter%word}&amp;#039;&amp;#039; pentru a afișa valoarea variabilei &amp;#039;&amp;#039;MY_FILE&amp;#039;&amp;#039; fără extensia &amp;#039;&amp;#039;.dist&amp;#039;&amp;#039;.
- * Folosiți &amp;#039;&amp;#039;for&amp;#039;&amp;#039;, &amp;#039;&amp;#039;find&amp;#039;&amp;#039; și &amp;#039;&amp;#039;cp&amp;#039;&amp;#039; pentru a crea copii de lucru ale fișierelor de mai sus.
+   *  Folosiți &amp;#039;&amp;#039;find&amp;#039;&amp;#039; pentru a afișa fișierele cu extensia &amp;#039;&amp;#039;.dist&amp;#039;&amp;#039; din ierahia &amp;#039;&amp;#039;lab12/ex03/horde/&amp;#039;&amp;#039;. (Hint: &amp;#039;&amp;#039;-type&amp;#039;&amp;#039;, &amp;#039;&amp;#039;-name&amp;#039;&amp;#039;)
+   *  Folosiți &amp;#039;&amp;#039;for&amp;#039;&amp;#039;, &amp;#039;&amp;#039;find&amp;#039;&amp;#039; și &amp;#039;&amp;#039;ls -l&amp;#039;&amp;#039; pentru a afișa informații complete despre fișierele de mai sus.
+   *  Inițializați variabila &amp;#039;&amp;#039;MY_FILE&amp;#039;&amp;#039; la valoarea &amp;#039;&amp;#039;conf.php.dist&amp;#039;&amp;#039;. Folosiți &amp;#039;&amp;#039;echo&amp;#039;&amp;#039; și construcția &amp;#039;&amp;#039;${parameter%word}&amp;#039;&amp;#039; pentru a afișa valoarea variabilei &amp;#039;&amp;#039;MY_FILE&amp;#039;&amp;#039; fără extensia &amp;#039;&amp;#039;.dist&amp;#039;&amp;#039;.
+   *  Folosiți &amp;#039;&amp;#039;for&amp;#039;&amp;#039;, &amp;#039;&amp;#039;find&amp;#039;&amp;#039; și &amp;#039;&amp;#039;cp&amp;#039;&amp;#039; pentru a crea copii de lucru ale fișierelor de mai sus.
  
- === read ===
+ ==== read ====
  
- * Intrați în directorul &amp;#039;&amp;#039;lab11/ex04/&amp;#039;&amp;#039;.
+   *  Intrați în directorul &amp;#039;&amp;#039;lab12/ex04/&amp;#039;&amp;#039;.
  
- ==== Tutorial ====
+ === Tutorial ===
  
- * Comenzile &amp;#039;&amp;#039;head&amp;#039;&amp;#039; și &amp;#039;&amp;#039;tail&amp;#039;&amp;#039; permit, respectiv, eliminarea ultimelor linii și a primelor linii dintr-un fișier. Rulați comenzile de mai jos:
+   *  Comenzile &amp;#039;&amp;#039;head&amp;#039;&amp;#039; și &amp;#039;&amp;#039;tail&amp;#039;&amp;#039; permit, respectiv, eliminarea ultimelor linii și a primelor linii dintr-un fișier. Rulați comenzile de mai jos:
  
  {{{
  head -n -1 numbers.txt
  tail -n +2 numbers.txt
  head -n -3 numbers.txt
  tail -n +2 numbers.txt
  }}}
  
- * Comanda &amp;#039;&amp;#039;read&amp;#039;&amp;#039; permite parsarea unui șir primit la intrare folosind spații albe ca separator implicit:
+   *  Comanda &amp;#039;&amp;#039;read&amp;#039;&amp;#039; permite parsarea unui șir primit la intrare folosind spații albe ca separator implicit:
  
  {{{
  echo &amp;quot;a b c d&amp;quot; | (read v1 v2 v3 v4; echo &amp;quot;$v1 # $v2 # $v3 # $v4&amp;quot;)
  echo &amp;quot;alfa      beta      gamma    delta&amp;quot; | (read v1 v2; echo &amp;quot;$v1 # $v2&amp;quot;)
  }}}
  
- * În general, &amp;#039;&amp;#039;read&amp;#039;&amp;#039; este folosit împreună cu &amp;#039;&amp;#039;while&amp;#039;&amp;#039; pentru a citi un întreg fișier.
+   *  În general, &amp;#039;&amp;#039;read&amp;#039;&amp;#039; este folosit împreună cu &amp;#039;&amp;#039;while&amp;#039;&amp;#039; pentru a citi un întreg fișier.
  
  {{{
  cat numbers.txt | while read num string; do echo &amp;quot;$string ## $num&amp;quot;; done
  }}}
  
- ==== Enunț ====
+ === Enunț ===
  
  Pornind de la catalogul din fișierul &amp;#039;&amp;#039;catalog.csv&amp;#039;&amp;#039;, creați scriptul &amp;#039;&amp;#039;select_7.sh&amp;#039;&amp;#039; care să afișeze numele și grupa celor care au nota mai mare sau egală cu &amp;#039;&amp;#039;7&amp;#039;&amp;#039;.
  
- ==== Pași ajutători ====
+ === Pași ajutători ===
  
- * Creați scriptul &amp;#039;&amp;#039;select_7.sh&amp;#039;&amp;#039; și folosiți &amp;#039;&amp;#039;tail&amp;#039;&amp;#039; pentru a afișa toate liniile mai puțin prima linie (linia de antet). (Hint: &amp;#039;&amp;#039;-n +N&amp;#039;&amp;#039;)
- * Actualizați în cadrul scriptului variabila &amp;#039;&amp;#039;IFS&amp;#039;&amp;#039; pentru ca read să folosească pe post de separator caracterul virgulă (&amp;#039;&amp;#039;,&amp;#039;&amp;#039;). (Hint: detalii [[http://www.faqs.org/docs/bashman/bashref_33.html|aici]] sau în pagina de manual a Bash - căutare după &amp;#039;&amp;#039;&amp;quot;Word splitting&amp;quot;&amp;#039;&amp;#039;)
- * Folosiți &amp;#039;&amp;#039;tail&amp;#039;&amp;#039;, &amp;#039;&amp;#039;while&amp;#039;&amp;#039; și &amp;#039;&amp;#039;read&amp;#039;&amp;#039; pentru a afișa doar numele și grupa studenților din fișierul &amp;#039;&amp;#039;catalog.txt&amp;#039;&amp;#039;, separate prin caracterul două puncte (&amp;#039;&amp;#039;:&amp;#039;&amp;#039;).
- * Folosiți &amp;#039;&amp;#039;if&amp;#039;&amp;#039; pentru a selecta studenții care au nota mai mare sau egală cu &amp;#039;&amp;#039;7&amp;#039;&amp;#039;.
+   *  Creați scriptul &amp;#039;&amp;#039;select_7.sh&amp;#039;&amp;#039; și folosiți &amp;#039;&amp;#039;tail&amp;#039;&amp;#039; pentru a afișa toate liniile mai puțin prima linie (linia de antet). (Hint: &amp;#039;&amp;#039;-n +N&amp;#039;&amp;#039;)
+   *  Actualizați în cadrul scriptului variabila &amp;#039;&amp;#039;IFS&amp;#039;&amp;#039; pentru ca read să folosească pe post de separator caracterul virgulă (&amp;#039;&amp;#039;,&amp;#039;&amp;#039;). (Hint: detalii [[http://www.faqs.org/docs/bashman/bashref_33.html|aici]] sau în pagina de manual a Bash - căutare după &amp;#039;&amp;#039;&amp;quot;Word splitting&amp;quot;&amp;#039;&amp;#039;)
+   *  Folosiți &amp;#039;&amp;#039;tail&amp;#039;&amp;#039;, &amp;#039;&amp;#039;while&amp;#039;&amp;#039; și &amp;#039;&amp;#039;read&amp;#039;&amp;#039; pentru a afișa doar numele și grupa studenților din fișierul &amp;#039;&amp;#039;catalog.txt&amp;#039;&amp;#039;, separate prin caracterul două puncte (&amp;#039;&amp;#039;:&amp;#039;&amp;#039;).
+   *  Folosiți &amp;#039;&amp;#039;if&amp;#039;&amp;#039; pentru a selecta studenții care au nota mai mare sau egală cu &amp;#039;&amp;#039;7&amp;#039;&amp;#039;.
  
- === grep, here document ===
+ ==== grep, here document ====
  
- * Intrați în directorul &amp;#039;&amp;#039;lab11/ex05/&amp;#039;&amp;#039;.
+   *  Intrați în directorul &amp;#039;&amp;#039;lab12/ex05/&amp;#039;&amp;#039;.
  
- ==== Tutorial ====
+ === Tutorial ===
  
- * Comanda &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; este folosită pentru a selecta liniile ce conțin un anumit șablon (expresie regulată):
+   *  Comanda &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; este folosită pentru a selecta liniile ce conțin un anumit șablon (expresie regulată):
  
  {{{
  grep &amp;quot;ana&amp;quot; names.txt
  grep &amp;quot;a.*a&amp;quot; names.txt
  }}}
  
- * Argumentul &amp;#039;&amp;#039;-v&amp;#039;&amp;#039; (revert selection) va selecta liniile ce **nu** conțin un anumit șablon:
+   *  Argumentul &amp;#039;&amp;#039;-v&amp;#039;&amp;#039; (revert selection) va selecta liniile ce **nu** conțin un anumit șablon:
  
  {{{
  grep -v &amp;quot;an&amp;quot; names.txt
  }}}
  
- ==== Enunț ====
+ === Enunț ===
  
  Creați un script &amp;#039;&amp;#039;ssl_update.sh&amp;#039;&amp;#039; care să adauge opțiunea de redirectare HTTPS în cadrul unui fișier de tip vhost pentru Apache. Adăugați opțiunea de mai jos la sfârșitul directivei &amp;#039;&amp;#039;&amp;lt;VirtualHost&amp;gt;&amp;#039;&amp;#039; din cadrul fișierului &amp;#039;&amp;#039;vhost.conf&amp;#039;&amp;#039;:
  
  {{{
@@ -202,181 +202,181 @@
    &amp;lt;/IfModule&amp;gt;
  &amp;lt;/IfModule&amp;gt;
  }}}
  
- ==== Pași ajutători ====
+ === Pași ajutători ===
  
- * Creați scriptul &amp;#039;&amp;#039;ssl_update.sh&amp;#039;&amp;#039;.
- * Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a afișa toate liniile mai puțin linia de încheiere a directivei vhost (&amp;#039;&amp;#039;&amp;lt;/VirtualHost&amp;gt;&amp;#039;&amp;#039;) (Hint: &amp;#039;&amp;#039;-v&amp;#039;&amp;#039;). Stocați rezultatul în fișierul &amp;#039;&amp;#039;vhost_new.conf&amp;#039;&amp;#039;.
- * Folosiți un [[http://www.faqs.org/docs/bashman/bashref_42.html|here document]] pentru a **adăuga** setul de directive de mai sus la sfârșitul fișierului &amp;#039;&amp;#039;vhost_new.conf&amp;#039;&amp;#039;.
- * Completați here document-ul pentru a adăuga inclusiv forma de încheiere a directivei (&amp;#039;&amp;#039;&amp;lt;/VirtualHost&amp;gt;&amp;#039;&amp;#039;).
+   *  Creați scriptul &amp;#039;&amp;#039;ssl_update.sh&amp;#039;&amp;#039;.
+   *  Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a afișa toate liniile mai puțin linia de încheiere a directivei vhost (&amp;#039;&amp;#039;&amp;lt;/VirtualHost&amp;gt;&amp;#039;&amp;#039;) (Hint: &amp;#039;&amp;#039;-v&amp;#039;&amp;#039;). Stocați rezultatul în fișierul &amp;#039;&amp;#039;vhost_new.conf&amp;#039;&amp;#039;.
+   *  Folosiți un [[http://www.faqs.org/docs/bashman/bashref_42.html|here document]] pentru a **adăuga** setul de directive de mai sus la sfârșitul fișierului &amp;#039;&amp;#039;vhost_new.conf&amp;#039;&amp;#039;.
+   *  Completați here document-ul pentru a adăuga inclusiv forma de încheiere a directivei (&amp;#039;&amp;#039;&amp;lt;/VirtualHost&amp;gt;&amp;#039;&amp;#039;).
  
- === variabile, source, sed ===
+ ==== variabile, source, sed ====
  
- * Intrați în directorul &amp;#039;&amp;#039;lab11/ex06/&amp;#039;&amp;#039;.
+   *  Intrați în directorul &amp;#039;&amp;#039;lab12/ex06/&amp;#039;&amp;#039;.
  
  ==== Tutorial ===
  
- * Comanda &amp;#039;&amp;#039;mail&amp;#039;&amp;#039; permite transmiterea unui e-mail. În mod obișnuit se specifică subiectul și destinatarul. Comanda de mai jos trimite mesajul &amp;#039;&amp;#039;&amp;quot;Say hello to my little friend&amp;quot;&amp;#039;&amp;#039; cu subiectul &amp;#039;&amp;#039;&amp;quot;Hello&amp;quot;&amp;#039;&amp;#039; utilizatorului &amp;#039;&amp;#039;student&amp;#039;&amp;#039;:
+   *  Comanda &amp;#039;&amp;#039;mail&amp;#039;&amp;#039; permite transmiterea unui e-mail. În mod obișnuit se specifică subiectul și destinatarul. Comanda de mai jos trimite mesajul &amp;#039;&amp;#039;&amp;quot;Say hello to my little friend&amp;quot;&amp;#039;&amp;#039; cu subiectul &amp;#039;&amp;#039;&amp;quot;Hello&amp;quot;&amp;#039;&amp;#039; utilizatorului &amp;#039;&amp;#039;student&amp;#039;&amp;#039;:
  
  {{{
  echo &amp;quot;Say hello to my little friend&amp;quot; | mail -s &amp;quot;Hello&amp;quot; student
  }}}
  
- * Utilitarul &amp;#039;&amp;#039;sed&amp;#039;&amp;#039; (stream editor) permite efectuarea a diverse operații pe un fișier la nivel de linie. În mod uzual este folosit pentru a substitui un șablon (expresie regulată) cu un șir:
+   *  Utilitarul &amp;#039;&amp;#039;sed&amp;#039;&amp;#039; (stream editor) permite efectuarea a diverse operații pe un fișier la nivel de linie. În mod uzual este folosit pentru a substitui un șablon (expresie regulată) cu un șir:
  
  {{{
  sed &amp;quot;s/ana/bogdan/g&amp;quot; names.txt
  }}}
  
- * Pentru a concatena mai multe prelucrări &amp;#039;&amp;#039;sed&amp;#039;&amp;#039; folosiți &amp;#039;&amp;#039;-e&amp;#039;&amp;#039;:
+   *  Pentru a concatena mai multe prelucrări &amp;#039;&amp;#039;sed&amp;#039;&amp;#039; folosiți &amp;#039;&amp;#039;-e&amp;#039;&amp;#039;:
  
  {{{
  sed -e &amp;quot;s/ana/bogdan/g&amp;quot; -e &amp;quot;s/an/nono/g&amp;quot; names.txt
  }}}
  
- ==== Enunț ====
+ === Enunț ===
  
- * Creați scriptul &amp;#039;&amp;#039;my_send_mail.sh&amp;#039;&amp;#039; care trimite un e-mail cu un mesaj personalizat pornind de la un template-ul &amp;#039;&amp;#039;mail_template.txt&amp;#039;&amp;#039; și fișierul de configurare &amp;#039;&amp;#039;config&amp;#039;&amp;#039;. Fișierul de configurare specifică variabilele folosite de script:
- ** &amp;#039;&amp;#039;SUBJECT&amp;#039;&amp;#039; - subiectul mesajul;
- ** &amp;#039;&amp;#039;DEST_ADDRESS&amp;#039;&amp;#039; - destinatarul;
- ** celelalte variabile reprezintă informații de substituit în template.
+   *  Creați scriptul &amp;#039;&amp;#039;my_send_mail.sh&amp;#039;&amp;#039; care trimite un e-mail cu un mesaj personalizat pornind de la un template-ul &amp;#039;&amp;#039;mail_template.txt&amp;#039;&amp;#039; și fișierul de configurare &amp;#039;&amp;#039;config&amp;#039;&amp;#039;. Fișierul de configurare specifică variabilele folosite de script:
+     *  &amp;#039;&amp;#039;SUBJECT&amp;#039;&amp;#039; - subiectul mesajul;
+     *  &amp;#039;&amp;#039;DEST_ADDRESS&amp;#039;&amp;#039; - destinatarul;
+     *  celelalte variabile reprezintă informații de substituit în template.
  
- ==== Pași ajutători ====
+ === Pași ajutători ===
  
- * Creați scriptul &amp;#039;&amp;#039;my_send_mail.sh&amp;#039;&amp;#039; în cadrul căruia afișați valoarea variabilei &amp;#039;&amp;#039;SUBJECT&amp;#039;&amp;#039; din fișierul &amp;#039;&amp;#039;config&amp;#039;&amp;#039;. (Hint: folosiți &amp;#039;&amp;#039;source&amp;#039;&amp;#039;)
- * Folosiți &amp;#039;&amp;#039;sed&amp;#039;&amp;#039; pentru a substitui șirul {{{__DEST_NAME__}}} din &amp;#039;&amp;#039;mail_template.txt&amp;#039;&amp;#039; cu &amp;#039;&amp;#039;Daniel&amp;#039;&amp;#039;.
- * Folosiți &amp;#039;&amp;#039;sed&amp;#039;&amp;#039; pentru a substitui șirul {{{__DEST_NAME__}}} din &amp;#039;&amp;#039;mail_template.txt&amp;#039;&amp;#039; cu valoarea variabilei &amp;#039;&amp;#039;DEST_NAME&amp;#039;&amp;#039; din fișierul &amp;#039;&amp;#039;config&amp;#039;&amp;#039;.
- * Completați scriptul &amp;#039;&amp;#039;my_send_mail.sh&amp;#039;&amp;#039; pentru a trimite un e-mail cu un mesaj personalizat pornind de la un template-ul &amp;#039;&amp;#039;mail_template.txt&amp;#039;&amp;#039; și fișierul de configurare &amp;#039;&amp;#039;config&amp;#039;&amp;#039;.
+   *  Creați scriptul &amp;#039;&amp;#039;my_send_mail.sh&amp;#039;&amp;#039; în cadrul căruia afișați valoarea variabilei &amp;#039;&amp;#039;SUBJECT&amp;#039;&amp;#039; din fișierul &amp;#039;&amp;#039;config&amp;#039;&amp;#039;. (Hint: folosiți &amp;#039;&amp;#039;source&amp;#039;&amp;#039;)
+   *  Folosiți &amp;#039;&amp;#039;sed&amp;#039;&amp;#039; pentru a substitui șirul {{{__DEST_NAME__}}} din &amp;#039;&amp;#039;mail_template.txt&amp;#039;&amp;#039; cu &amp;#039;&amp;#039;Daniel&amp;#039;&amp;#039;.
+   *  Folosiți &amp;#039;&amp;#039;sed&amp;#039;&amp;#039; pentru a substitui șirul {{{__DEST_NAME__}}} din &amp;#039;&amp;#039;mail_template.txt&amp;#039;&amp;#039; cu valoarea variabilei &amp;#039;&amp;#039;DEST_NAME&amp;#039;&amp;#039; din fișierul &amp;#039;&amp;#039;config&amp;#039;&amp;#039;.
+   *  Completați scriptul &amp;#039;&amp;#039;my_send_mail.sh&amp;#039;&amp;#039; pentru a trimite un e-mail cu un mesaj personalizat pornind de la un template-ul &amp;#039;&amp;#039;mail_template.txt&amp;#039;&amp;#039; și fișierul de configurare &amp;#039;&amp;#039;config&amp;#039;&amp;#039;.
  
- === grep, sed ===
+ ==== grep, sed ====
  
- * Intrați în directorul &amp;#039;&amp;#039;lab11/ex07/&amp;#039;&amp;#039;.
+   *  Intrați în directorul &amp;#039;&amp;#039;lab12/ex07/&amp;#039;&amp;#039;.
  
- ==== Tutorial ====
+ === Tutorial ===
  
- * Utilitarul &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; folosește un șablon (expresie regulată) pentru selectarea liniilor. Caracterele căciulă (&amp;#039;&amp;#039;^&amp;#039;&amp;#039;) și dolar (&amp;#039;&amp;#039;$&amp;#039;&amp;#039;) se potrivesc, respectiv, cu începutul și sfârșitul unei linii:
+   *  Utilitarul &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; folosește un șablon (expresie regulată) pentru selectarea liniilor. Caracterele căciulă (&amp;#039;&amp;#039;^&amp;#039;&amp;#039;) și dolar (&amp;#039;&amp;#039;$&amp;#039;&amp;#039;) se potrivesc, respectiv, cu începutul și sfârșitul unei linii:
  
  {{{
  grep &amp;#039;ana&amp;#039; nonsense.txt
  grep &amp;#039;^ana&amp;#039; nonsense.txt
  grep &amp;#039;ana$&amp;#039; nonsense.txt
  }}}
  
- * Argumentul &amp;#039;&amp;#039;-i&amp;#039;&amp;#039; al utilitarului &amp;#039;&amp;#039;sed&amp;#039;&amp;#039; permite modificarea &amp;quot;in place&amp;quot; a unui fișier:
+   *  Argumentul &amp;#039;&amp;#039;-i&amp;#039;&amp;#039; al utilitarului &amp;#039;&amp;#039;sed&amp;#039;&amp;#039; permite modificarea &amp;quot;in place&amp;quot; a unui fișier:
  
  {{{
  cp nonsense.txt nonsense.txt.old
  sed -i &amp;quot;s/ana/bogdan/g&amp;quot; nonsense.txt
  sed -i.bak &amp;quot;s/ana/bogdan/g&amp;quot; nonsense.txt.old
  ls nonsense.txt*
  }}}
  
- ==== Enunț ====
+ === Enunț ===
  
- * Fișierul &amp;#039;&amp;#039;svn.passwd&amp;#039;&amp;#039; conține linii de forma &amp;#039;&amp;#039;username: password&amp;#039;&amp;#039; folosite pentru autentificare în [[http://subversion.tigris.org/|Subversion]]. Creați scriptul &amp;#039;&amp;#039;update_svn_passwd.sh&amp;#039;&amp;#039; care actualizează fișierul cu parole:
- ** scriptul primește două argumente: numele de utilizator (&amp;#039;&amp;#039;username&amp;#039;&amp;#039;) și parola (&amp;#039;&amp;#039;password&amp;#039;&amp;#039;);
- ** dacă numele de utilizator există se actualizează (substituie) parola;
- ** dacă numele de utilizator nu există se adaugă parola.
+   *  Fișierul &amp;#039;&amp;#039;svn.passwd&amp;#039;&amp;#039; conține linii de forma &amp;#039;&amp;#039;username: password&amp;#039;&amp;#039; folosite pentru autentificare în [[http://subversion.tigris.org/|Subversion]]. Creați scriptul &amp;#039;&amp;#039;update_svn_passwd.sh&amp;#039;&amp;#039; care actualizează fișierul cu parole:
+     *  scriptul primește două argumente: numele de utilizator (&amp;#039;&amp;#039;username&amp;#039;&amp;#039;) și parola (&amp;#039;&amp;#039;password&amp;#039;&amp;#039;);
+     *  dacă numele de utilizator există se actualizează (substituie) parola;
+     *  dacă numele de utilizator nu există se adaugă parola.
  
- ==== Pași ajutători ====
+ === Pași ajutători ===
  
- * Creați scriptul &amp;#039;&amp;#039;update_svn_passwd.sh&amp;#039;&amp;#039; care primește doi parametri și îi afișează.
- * Folosiți grep pentru a extrage din fișierul &amp;#039;&amp;#039;svn.passwd&amp;#039;&amp;#039; linia asociată numelui de utilizator primit ca prim argument. ((Hint: &amp;#039;&amp;#039;^&amp;#039;&amp;#039;, &amp;#039;&amp;#039;$1&amp;#039;&amp;#039;)
- * Afișați &amp;#039;&amp;#039;yes&amp;#039;&amp;#039; sau &amp;#039;&amp;#039;no&amp;#039;&amp;#039; după cum numele de utilizator primit ca prim argument se gasește în fișierul &amp;#039;&amp;#039;svn.passwd&amp;#039;&amp;#039;. (Hint: &amp;#039;&amp;#039;$?&amp;#039;&amp;#039;)
- * În cazul în care numele de utilizator primit ca argument **nu** se găsește în fișierul &amp;#039;&amp;#039;svn.passwd&amp;#039;&amp;#039; **adăugați** linia &amp;#039;&amp;#039;$username: $password&amp;#039;&amp;#039; la sfârșitul fișierului. (&amp;#039;&amp;#039;$username&amp;#039;&amp;#039; este primul argument, iar &amp;#039;&amp;#039;$password&amp;#039;&amp;#039; este al doilea argument) (Hint: &amp;#039;&amp;#039;echo&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;gt;&amp;gt;&amp;#039;&amp;#039;)
- * În cazul în care numele de utilizator primit ca argument se găsește în fișierul &amp;#039;&amp;#039;svn.passwd&amp;#039;&amp;#039;, actualizați linia asociată. (Hint: &amp;#039;&amp;#039;sed&amp;#039;&amp;#039;, &amp;#039;&amp;#039;\1&amp;#039;&amp;#039;, &amp;#039;&amp;#039;-i&amp;#039;&amp;#039;)
+   *  Creați scriptul &amp;#039;&amp;#039;update_svn_passwd.sh&amp;#039;&amp;#039; care primește doi parametri și îi afișează.
+   *  Folosiți grep pentru a extrage din fișierul &amp;#039;&amp;#039;svn.passwd&amp;#039;&amp;#039; linia asociată numelui de utilizator primit ca prim argument. ((Hint: &amp;#039;&amp;#039;^&amp;#039;&amp;#039;, &amp;#039;&amp;#039;$1&amp;#039;&amp;#039;)
+   *  Afișați &amp;#039;&amp;#039;yes&amp;#039;&amp;#039; sau &amp;#039;&amp;#039;no&amp;#039;&amp;#039; după cum numele de utilizator primit ca prim argument se gasește în fișierul &amp;#039;&amp;#039;svn.passwd&amp;#039;&amp;#039;. (Hint: &amp;#039;&amp;#039;$?&amp;#039;&amp;#039;)
+   *  În cazul în care numele de utilizator primit ca argument **nu** se găsește în fișierul &amp;#039;&amp;#039;svn.passwd&amp;#039;&amp;#039; **adăugați** linia &amp;#039;&amp;#039;$username: $password&amp;#039;&amp;#039; la sfârșitul fișierului. (&amp;#039;&amp;#039;$username&amp;#039;&amp;#039; este primul argument, iar &amp;#039;&amp;#039;$password&amp;#039;&amp;#039; este al doilea argument) (Hint: &amp;#039;&amp;#039;echo&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;gt;&amp;gt;&amp;#039;&amp;#039;)
+   *  În cazul în care numele de utilizator primit ca argument se găsește în fișierul &amp;#039;&amp;#039;svn.passwd&amp;#039;&amp;#039;, actualizați linia asociată. (Hint: &amp;#039;&amp;#039;sed&amp;#039;&amp;#039;, &amp;#039;&amp;#039;\1&amp;#039;&amp;#039;, &amp;#039;&amp;#039;-i&amp;#039;&amp;#039;)
  
- === grep, expresii regulate ===
+ ==== grep, expresii regulate ====
  
- * Intrați în directorul &amp;#039;&amp;#039;lab11/ex08/&amp;#039;&amp;#039;.
+   *  Intrați în directorul &amp;#039;&amp;#039;lab12/ex08/&amp;#039;&amp;#039;.
  
- ==== Tutorial ====
+ === Tutorial ===
  
- * Expresiile regulate utilizate de &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; folosesc caractere care au rol special (&amp;#039;&amp;#039;^&amp;#039;&amp;#039;, &amp;#039;&amp;#039;$&amp;#039;&amp;#039;, &amp;#039;&amp;#039;*&amp;#039;&amp;#039;, &amp;#039;&amp;#039;+&amp;#039;&amp;#039;, &amp;#039;&amp;#039;.&amp;#039;&amp;#039;). Pentru a putea fi folosite cu rol de caracter ASCII se citează folosind backslash (&amp;#039;&amp;#039;\&amp;#039;&amp;#039;):
+   *  Expresiile regulate utilizate de &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; folosesc caractere care au rol special (&amp;#039;&amp;#039;^&amp;#039;&amp;#039;, &amp;#039;&amp;#039;$&amp;#039;&amp;#039;, &amp;#039;&amp;#039;*&amp;#039;&amp;#039;, &amp;#039;&amp;#039;+&amp;#039;&amp;#039;, &amp;#039;&amp;#039;.&amp;#039;&amp;#039;). Pentru a putea fi folosite cu rol de caracter ASCII se citează folosind backslash (&amp;#039;&amp;#039;\&amp;#039;&amp;#039;):
  
  {{{
  echo -e &amp;quot;run*for*it \n runforit&amp;quot; | grep &amp;quot;run*for&amp;quot;
  echo -e &amp;quot;run*for*it \n runforit&amp;quot; | grep &amp;quot;run\*for&amp;quot;
  }}}
  
- * &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; selectează linii care conțin un șir descris printr-o expresie regulată. Pentru a extrage un cuvânt se folosește &amp;#039;&amp;#039;-w&amp;#039;&amp;#039; sau construcția &amp;#039;&amp;#039;\&amp;lt; .. \&amp;gt;&amp;#039;&amp;#039;:
+   *  &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; selectează linii care conțin un șir descris printr-o expresie regulată. Pentru a extrage un cuvânt se folosește &amp;#039;&amp;#039;-w&amp;#039;&amp;#039; sau construcția &amp;#039;&amp;#039;\&amp;lt; .. \&amp;gt;&amp;#039;&amp;#039;:
  
  {{{
  echo -e &amp;quot;anaconda \n ana are mere \n roxana&amp;quot; | grep &amp;quot;ana&amp;quot;
  echo -e &amp;quot;anaconda \n ana are mere \n roxana&amp;quot; | grep -w &amp;quot;ana&amp;quot;
  echo -e &amp;quot;anaconda \n ana are mere \n roxana&amp;quot; | grep &amp;quot;\&amp;lt;ana\&amp;gt;&amp;quot;
  }}}
  
- ==== Enunț ====
+ === Enunț ===
  
  Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a selecta alias-urile cu destinația de forma &amp;#039;&amp;#039;nume.prenume@gmail.com&amp;#039;&amp;#039; din fișierul &amp;#039;&amp;#039;aliases&amp;#039;&amp;#039;. Intrările din fișierul &amp;#039;&amp;#039;aliases&amp;#039;&amp;#039; se consideră de forma &amp;#039;&amp;#039;alias: destinație&amp;#039;&amp;#039;.
  
- ==== Pași ajutători ====
+ === Pași ajutători ===
  
- * Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a selecta liniile ce conțin șirul &amp;#039;&amp;#039;gmail&amp;#039;&amp;#039;.
- * Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a selecta liniile ce conțin șirul &amp;#039;&amp;#039;gmail.com&amp;#039;&amp;#039;. (Hint: folosiți &amp;#039;&amp;#039;\&amp;#039;&amp;#039; pentru citare)
- * Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a selecta liniile ce conțin cuvântul &amp;#039;&amp;#039;gmail.com&amp;#039;&amp;#039;. (Hint: &amp;#039;&amp;#039;\&amp;lt;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;\&amp;gt;&amp;#039;&amp;#039;)
- * Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a selecta liniile ce conțin cuvântul &amp;#039;&amp;#039;gmail.com&amp;#039;&amp;#039; în destinație. (Hint: dacă folosiți &amp;#039;&amp;#039;+&amp;#039;&amp;#039; acesta trebuie citat cu &amp;#039;&amp;#039;\&amp;#039;&amp;#039; pentru a avea rol în expresia regulată - unul sau mai multe caractere)
- * Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a selecta liniile ce conțin șirul-cuvânt &amp;#039;&amp;#039;nume.prenume@gmail.com&amp;#039;&amp;#039; în destinație. (**Atenție**: intrarea ce conține &amp;#039;&amp;#039;j.r.r.tolkien@gmail.com&amp;#039;&amp;#039; este invalidă)
+   *  Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a selecta liniile ce conțin șirul &amp;#039;&amp;#039;gmail&amp;#039;&amp;#039;.
+   *  Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a selecta liniile ce conțin șirul &amp;#039;&amp;#039;gmail.com&amp;#039;&amp;#039;. (Hint: folosiți &amp;#039;&amp;#039;\&amp;#039;&amp;#039; pentru citare)
+   *  Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a selecta liniile ce conțin cuvântul &amp;#039;&amp;#039;gmail.com&amp;#039;&amp;#039;. (Hint: &amp;#039;&amp;#039;\&amp;lt;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;\&amp;gt;&amp;#039;&amp;#039;)
+   *  Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a selecta liniile ce conțin cuvântul &amp;#039;&amp;#039;gmail.com&amp;#039;&amp;#039; în destinație. (Hint: dacă folosiți &amp;#039;&amp;#039;+&amp;#039;&amp;#039; acesta trebuie citat cu &amp;#039;&amp;#039;\&amp;#039;&amp;#039; pentru a avea rol în expresia regulată - unul sau mai multe caractere)
+   *  Folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a selecta liniile ce conțin șirul-cuvânt &amp;#039;&amp;#039;nume.prenume@gmail.com&amp;#039;&amp;#039; în destinație. (**Atenție**: intrarea ce conține &amp;#039;&amp;#039;j.r.r.tolkien@gmail.com&amp;#039;&amp;#039; este invalidă)
  
- === grep, awk, sort, uniq ===
+ ==== grep, awk, sort, uniq ====
  
- * **Dificultate sporită**
- * Intrați în directorul &amp;#039;&amp;#039;lab11/ex09/&amp;#039;&amp;#039;.
+   *  **Dificultate sporită**
+   *  Intrați în directorul &amp;#039;&amp;#039;lab12/ex09/&amp;#039;&amp;#039;.
  
- ==== Tutorial ====
+ === Tutorial ===
  
- * Utilitarul &amp;#039;&amp;#039;awk&amp;#039;&amp;#039;&amp;#039; permite manipulări avansate ale unui fișier la nivel de linie. Sintaxa este similară cu cea a limbajului C. Poate fi folosit ca o versiune avansată a comenzilor &amp;#039;&amp;#039;read&amp;#039;&amp;#039; și &amp;#039;&amp;#039;cut&amp;#039;&amp;#039; (pentru parsarea intrării). Argumentul &amp;#039;&amp;#039;-F&amp;#039;&amp;#039; permite precizarea separatorului:
+   *  Utilitarul &amp;#039;&amp;#039;awk&amp;#039;&amp;#039;&amp;#039; permite manipulări avansate ale unui fișier la nivel de linie. Sintaxa este similară cu cea a limbajului C. Poate fi folosit ca o versiune avansată a comenzilor &amp;#039;&amp;#039;read&amp;#039;&amp;#039; și &amp;#039;&amp;#039;cut&amp;#039;&amp;#039; (pentru parsarea intrării). Argumentul &amp;#039;&amp;#039;-F&amp;#039;&amp;#039; permite precizarea separatorului:
  
  {{{
  cat lista.txt | awk -F &amp;#039;[ \t]+&amp;#039; &amp;#039;{ print &amp;quot;nume:&amp;quot;, $1, &amp;quot;prenume&amp;quot;, $2; }&amp;#039;
  cat /etc/passwd | awk -F &amp;#039;:&amp;#039; &amp;#039;{ print &amp;quot;nume:&amp;quot;, $1, &amp;quot;home:&amp;quot;, $6; }&amp;#039;
  }}}
  
- * Utilitarul &amp;#039;&amp;#039;sort&amp;#039;&amp;#039; sortează liniile de la intrare. Este folosit de obicei în conjuncție cu &amp;#039;&amp;#039;uniq&amp;#039;&amp;#039;:
+   *  Utilitarul &amp;#039;&amp;#039;sort&amp;#039;&amp;#039; sortează liniile de la intrare. Este folosit de obicei în conjuncție cu &amp;#039;&amp;#039;uniq&amp;#039;&amp;#039;:
  
  {{{
  cat lista2.txt | sort
  cat lista2.txt | sort | uniq
  }}}
  
- ==== Enunț ====
+ === Enunț ===
  
- * Fișierul &amp;#039;&amp;#039;sent_mail.txt&amp;#039;&amp;#039; conține mesaje trimise de un utilizator. Creați un script &amp;#039;&amp;#039;dest_sort.sh&amp;#039;&amp;#039; care sortează mesajele trimise de un utilizator după destinatari; se vor afișa adresa de e-mail a destinatarului și numărul de mesaje transmise de acesta.
+   *  Fișierul &amp;#039;&amp;#039;sent_mail.txt&amp;#039;&amp;#039; conține mesaje trimise de un utilizator. Creați un script &amp;#039;&amp;#039;dest_sort.sh&amp;#039;&amp;#039; care sortează mesajele trimise de un utilizator după destinatari; se vor afișa adresa de e-mail a destinatarului și numărul de mesaje transmise de acesta.
  
- ==== Pași ajutători ====
+ === Pași ajutători ===
  
- * Creați scriptul &amp;#039;&amp;#039;dest_sort.sh&amp;#039;&amp;#039; și folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a extrage din fișierul &amp;#039;&amp;#039;sent_mail.txt&amp;#039;&amp;#039; liniile care specifică destinatarul (liniile care încep cu &amp;#039;&amp;#039;To:&amp;#039;&amp;#039;).
- * Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;awk&amp;#039;&amp;#039; pentru a extrage **doar** adresa de e-mail a primului destinatar. (Hint: folosiți &amp;#039;&amp;#039;&amp;lt;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;gt;&amp;#039;&amp;#039; ca separatori; vor exista excepții dar sunt tolerabile)
- * Folosiți înlănțuirea comenzilor și &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a elimina liniile albe (liniile care conțin doar spații sau caractere TAB sau care nu conțin nimic).
- * Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;sort&amp;#039;&amp;#039; pentru a sorta adresele de e-mail ale destinatarilor.
- * Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;uniq&amp;#039;&amp;#039; pentru a &amp;quot;uniciza&amp;quot; adresele de e-mail ale destinatarilor cu afișarea numărului de apariții ale acestora. (Hint: &amp;#039;&amp;#039;-c&amp;#039;&amp;#039;)
- * Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;sort&amp;#039;&amp;#039; pentru a sorta adreselele de e-mail după numărul de apariții ale acestora .(Hint: &amp;#039;&amp;#039;-r&amp;#039;&amp;#039;, &amp;#039;&amp;#039;-n&amp;#039;&amp;#039;)
+   *  Creați scriptul &amp;#039;&amp;#039;dest_sort.sh&amp;#039;&amp;#039; și folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a extrage din fișierul &amp;#039;&amp;#039;sent_mail.txt&amp;#039;&amp;#039; liniile care specifică destinatarul (liniile care încep cu &amp;#039;&amp;#039;To:&amp;#039;&amp;#039;).
+   *  Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;awk&amp;#039;&amp;#039; pentru a extrage **doar** adresa de e-mail a primului destinatar. (Hint: folosiți &amp;#039;&amp;#039;&amp;lt;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;gt;&amp;#039;&amp;#039; ca separatori; vor exista excepții dar sunt tolerabile)
+   *  Folosiți înlănțuirea comenzilor și &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a elimina liniile albe (liniile care conțin doar spații sau caractere TAB sau care nu conțin nimic).
+   *  Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;sort&amp;#039;&amp;#039; pentru a sorta adresele de e-mail ale destinatarilor.
+   *  Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;uniq&amp;#039;&amp;#039; pentru a &amp;quot;uniciza&amp;quot; adresele de e-mail ale destinatarilor cu afișarea numărului de apariții ale acestora. (Hint: &amp;#039;&amp;#039;-c&amp;#039;&amp;#039;)
+   *  Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;sort&amp;#039;&amp;#039; pentru a sorta adreselele de e-mail după numărul de apariții ale acestora .(Hint: &amp;#039;&amp;#039;-r&amp;#039;&amp;#039;, &amp;#039;&amp;#039;-n&amp;#039;&amp;#039;)
  
- === grep, awk, sort, uniq ===
+ ==== grep, awk, sort, uniq ====
  
- * **Dificultate sporită**
- * Intrați în directorul &amp;#039;&amp;#039;lab11/ex10/&amp;#039;&amp;#039;.
+   *  **Dificultate sporită**
+   *  Intrați în directorul &amp;#039;&amp;#039;lab12/ex10/&amp;#039;&amp;#039;.
  
- ==== Enunț ====
+ === Enunț ===
  
- * Fișierul &amp;#039;&amp;#039;sent_mail.txt&amp;#039;&amp;#039; conține mesaje trimise de un utilizator. Creați un script &amp;#039;&amp;#039;dest_sort.sh&amp;#039;&amp;#039; care script care sortează mesajele trimise de un utilizator în funcție de data la care au fost transmise; se vor afișa data de transmitere a mesajului și numărul de mesaje transmise la acea dată.
+   *  Fișierul &amp;#039;&amp;#039;sent_mail.txt&amp;#039;&amp;#039; conține mesaje trimise de un utilizator. Creați un script &amp;#039;&amp;#039;dest_sort.sh&amp;#039;&amp;#039; care script care sortează mesajele trimise de un utilizator în funcție de data la care au fost transmise; se vor afișa data de transmitere a mesajului și numărul de mesaje transmise la acea dată.
  
- ==== Pași ajutători ====
+ === Pași ajutători ===
  
- * Creați scriptul &amp;#039;&amp;#039;date_sort.sh&amp;#039;&amp;#039; și folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a extrage din fișierul &amp;#039;&amp;#039;sent_mail.txt&amp;#039;&amp;#039; liniile care specifică data (liniile care încep cu &amp;#039;&amp;#039;Date:&amp;#039;&amp;#039;).
- * Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;awk&amp;#039;&amp;#039; pentru a extrage **doar** data de transmitere a mesajului. (Hint: se presupune data în formatul &amp;#039;&amp;#039;Day, DD Mon YYYY&amp;#039;&amp;#039; - adică 4 cuvinte separate prin spațiu)
- * Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;sort&amp;#039;&amp;#039; pentru a sorta datele mesajelor.
- * Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;uniq&amp;#039;&amp;#039; pentru a &amp;quot;uniciza&amp;quot; datele mesajelor cu afișarea numărului de apariții ale acestora (Hint: &amp;#039;&amp;#039;-c&amp;#039;&amp;#039;)
- * Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;sort&amp;#039;&amp;#039; pentru a sorta datele mesajelor după numărul de apariții ale acestora (Hint: &amp;#039;&amp;#039;-r&amp;#039;&amp;#039;, &amp;#039;&amp;#039;-n&amp;#039;&amp;#039;)
+   *  Creați scriptul &amp;#039;&amp;#039;date_sort.sh&amp;#039;&amp;#039; și folosiți &amp;#039;&amp;#039;grep&amp;#039;&amp;#039; pentru a extrage din fișierul &amp;#039;&amp;#039;sent_mail.txt&amp;#039;&amp;#039; liniile care specifică data (liniile care încep cu &amp;#039;&amp;#039;Date:&amp;#039;&amp;#039;).
+   *  Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;awk&amp;#039;&amp;#039; pentru a extrage **doar** data de transmitere a mesajului. (Hint: se presupune data în formatul &amp;#039;&amp;#039;Day, DD Mon YYYY&amp;#039;&amp;#039; - adică 4 cuvinte separate prin spațiu)
+   *  Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;sort&amp;#039;&amp;#039; pentru a sorta datele mesajelor.
+   *  Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;uniq&amp;#039;&amp;#039; pentru a &amp;quot;uniciza&amp;quot; datele mesajelor cu afișarea numărului de apariții ale acestora (Hint: &amp;#039;&amp;#039;-c&amp;#039;&amp;#039;)
+   *  Folosiți înlănțuirea comenzilor (&amp;#039;&amp;#039;|&amp;#039;&amp;#039;) și &amp;#039;&amp;#039;sort&amp;#039;&amp;#039; pentru a sorta datele mesajelor după numărul de apariții ale acestora (Hint: &amp;#039;&amp;#039;-r&amp;#039;&amp;#039;, &amp;#039;&amp;#039;-n&amp;#039;&amp;#039;)
  
- == Idei pentru shell scripting 1 ==
+ ===== Idei pentru shell scripting 1 =====
  
- * script care copiază un set de fișire în home-ul unor utilizatori primiți ca argument pe sistemul local și schimbă owner-ul acestora
- * adăugarea unei chei publice pe un sistem la distanță într-un one liner
- * script care copiază un fișier pe mai multe sisteme din rețeaua locală (poate integrat cu mdns)
+   *  script care copiază un set de fișire în home-ul unor utilizatori primiți ca argument pe sistemul local și schimbă owner-ul acestora
+   *  adăugarea unei chei publice pe un sistem la distanță într-un one liner
+   *  script care copiază un fișier pe mai multe sisteme din rețeaua locală (poate integrat cu mdns)
  
- == Extra ==
+ ===== Extra =====
  
- * copierea unei ierarhii (doar fișierele cu extensia &amp;#039;&amp;#039;.php.dist&amp;#039;&amp;#039; împreună cu directoarele asociate)
- * gestiunea unei adrese electronice (address book)
+   *  copierea unei ierarhii (doar fișierele cu extensia &amp;#039;&amp;#039;.php.dist&amp;#039;&amp;#039; împreună cu directoarele asociate)
+   *  gestiunea unei adrese electronice (address book)

&lt;/pre&gt;</description>
    </item>
</rdf:RDF>
