LINUX.ORG.RU

Потому что сабшелл, братюнь.

anonymous
()

А ведь и правда.

$ file='/tmp/tst'
$ sep='$'
$ num=`grep -o "\\$sep" "$file"|wc -l` 
$ echo "Debug: num: [$num]"
Debug: num: [0]
$ num=$(grep -o "\\$sep" "$file"|wc -l)
$ echo "Debug: num: [$num]"
Debug: num: [2]
legolegs ★★★★★
()

В грепе кавычки елочками нельзя заменять.

anonymous
()
Ответ на: комментарий от Deleted
#!/bin/sh
file='/tmp/tst'
sep='$'

num=$(grep -o "\\$sep" "$file"|wc -l) 
echo "Debug: num: [$num]"
justAmoment ★★★★★
()
Ответ на: комментарий от legolegs

Debug: num: [2]

Что-то я не понимаю :(

#!/bin/bash

file='/tmp/tst'
sep='$'

num=$(grep -o "\\$sep" "$file"|wc -l)
echo "Debug: num: [$num]"
Debug: num: [0]

Deleted
()
Ответ на: комментарий от drBatty

я даже не догадываюсь, что там у вас в /tmp/tst

Какое это имеет значение? У меня в этом файле несколько символов доллара. Надо подсчитать их количество.

Deleted
()
Ответ на: комментарий от beastie
#!/bin/bash

file='/tmp/tst'
sep='$'

num=$(grep -c "$sep" "$file") 
echo "Debug: num: [$num]"

Debug: num: [22] Должно быть 6.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Deleted

Какое это имеет значение? У меня в этом файле несколько символов доллара. Надо подсчитать их количество.

а почему ты считаешь комбинацию «слеш-доллар»? Переменная $sep у тебя равна доллару, а перед ней стоит слеш двойной слеш в кавычках значит - просто слэш.

$ echo "$LANG"
ru_RU.UTF-8
$ echo "\\$LANG"
\ru_RU.UTF-8
drBatty ★★
()
Ответ на: комментарий от beastie

За 'wc -l' по пальцам бить надо. Есть же опция -c у grep!

Ты, лошарик, задание прочти внимательно сначала, потом вякай.

echo '1 1 1 1' | grep -c 1

echo '1 1 1 1' | grep -o 1 | wc -l

anonymous
()
[nexfwall@PCG31311V-LF02 ~]$ bash -x test
+ file=/tmp/tst
+ sep='$'
++ grep -o '$sep' /tmp/tst
grep: /tmp/tst: Нет такого файла или каталога
++ wc -l
+ num=0
+ echo 'Debug: num: [0]'
Debug: num: [0]
[nexfwall@PCG31311V-LF02 ~]$ cat test
#!/bin/bash -x
file='/tmp/tst'
sep='$'

num=$(grep -o "\\$sep" "$file" | wc -l)
echo "Debug: num: [$num]"

А что должно быть в /tmp/tst?

nexfwall ★★★★
()
Последнее исправление: nexfwall (всего исправлений: 1)
$ cat lor1.sh 
#!/bin/sh
file=$(basename "$0")
sep='$'

echo "search '$sep' in '$file'"
echo "--- matching ---"
num1=`grep -o "\\\\$sep" "$file"|wc -l`
echo "Debug: num1: [$num1]"
num2=$(grep -o "\\$sep" "$file"|wc -l)
echo "Debug: num2: [$num2]"
echo "--- lines ---"
num3=`grep -c "\\\\$sep" "$file"`
echo "Debug: num3: [$num3]"
num4=$(grep -c "\\$sep" "$file")
echo "Debug: num4: [$num4]"
$ ./lor1.sh
search '$' in 'lor1.sh'
--- matching ---
Debug: num1: [19]
Debug: num2: [19]
--- lines ---
Debug: num3: [11]
Debug: num4: [11]
justAmoment ★★★★★
()
Ответ на: комментарий от nexfwall

Текст, где определенные куски, например, цитаты, разделены символом '$'. Планируется в дальнейшем написать скрипт, который будет переносить эти цитаты в «$file2», обрабатывать нужным образом «$file1», при этом не трогая «$file2», потом возвращать содержимое «$file2» на место.

Deleted
()
Ответ на: комментарий от linuxnewb
#!/bin/bash
file='/tmp/tst'
sep=\\$
num=`grep -o "$sep" "$file"|wc -l`
echo "Debug: num: [$num]"

Debug: num: [0]

Deleted
()
Ответ на: комментарий от Deleted
[nexfwall@PCG31311V-LF02 ~]$ bash -x test
+ file=/tmp/tst
+ sep='$'
++ wc -l
++ grep -o '\$' /tmp/tst
+ num=6
+ echo 'Debug: num: [6]'
Debug: num: [6]
[nexfwall@PCG31311V-LF02 ~]$ cat /tmp/tst
$$
$
$$$
[nexfwall@PCG31311V-LF02 ~]$ cat test
#!/bin/bash -x
file='/tmp/tst'
sep='$'

num=$(grep -o "\\$sep" "$file" | wc -l )
echo "Debug: num: [$num]"

Оно?

nexfwall ★★★★
()
Последнее исправление: nexfwall (всего исправлений: 1)
Ответ на: комментарий от justAmoment

Я не понял, зачем отдельно примеры с '\\\\', '\\'? Мне бы подсчитать число символов доллара в файле.

Deleted
()
Ответ на: комментарий от Deleted

Я не понял, зачем отдельно примеры с '\\\\', '\\'? Мне бы подсчитать число символов доллара в файле.

Скрипт считает сам себя. Правильный ответ = 19.

Отличие в способе записи

num1=`_________"\\\\$sep"_________`
num2=$(_________"\\$sep"_________)

justAmoment ★★★★★
()
Последнее исправление: justAmoment (всего исправлений: 2)
Ответ на: комментарий от justAmoment

для примера приведены num3, num4, которые считают только количество линий со знаком доллара по способу, предложенному ранее в треде.

justAmoment ★★★★★
()
Ответ на: комментарий от justAmoment

Спасибо, понятно. Наконец-то рабочий скрипт.

#!/bin/bash
sep='$'
file='/tmp/tst'
echo "search '$sep' in '$file'"
num=$(grep -o "\\$sep" "$file"|wc -l)
echo "Debug: num: [$num]"

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Deleted

Текст, где определенные куски, например, цитаты, разделены символом '$'. Планируется в дальнейшем написать скрипт, который будет переносить эти цитаты в «$file2», обрабатывать нужным образом «$file1», при этом не трогая «$file2», потом возвращать содержимое «$file2» на место.

дык и надо тогда решать задачу (то есть выделять требуемые вам цитаты), а не подсчитывать кол-во $ в тексте.

SEP='\$'
grep -Hnbo "$SEP[^$SEP]*$SEP" $file | tac

получится индексный файл пригодный для внешней обработки и последующей замены «цитат»

MKuznetsov ★★★★★
()
Ответ на: комментарий от Deleted

В /tmp/lst я насчитал 6 символов $. Всё верно посчитало. Я считаю как-то неправильно, или ты просто не понимаешь чего ты хочешь?

nexfwall ★★★★
()
Ответ на: комментарий от nexfwall

В тестовом файле намудрил, только потом заметил.

Deleted
()
Ответ на: комментарий от MKuznetsov

а не подсчитывать кол-во $ в тексте.

Я для начала хотел проверить, четное ли их количество (открытие-закрытие фрагмента)

получится индексный файл пригодный для внешней обработки и последующей замены «цитат»

Спасибо за наводку!

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.