<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>文档 on MEMEX</title>
    <link>https://memex.keinmal.top/docs/</link>
    <description>Recent content in 文档 on MEMEX</description>
    <generator>Hugo --0.164.0</generator>
    <language>zh-cn</language><managingEditor>wyz2016zxc@outlook.com(Hiraeth)</managingEditor><webMaster>wyz2016zxc@outlook.com(Hiraeth)</webMaster><atom:link href="https://memex.keinmal.top/docs/index.xml" rel="self" type="application/rss+xml" /><item>
      <title>json toml yaml</title>
      <link>https://memex.keinmal.top/docs/code/json-toml-yaml/</link>
      <pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://memex.keinmal.top/docs/code/json-toml-yaml/</guid>
      <description>三种数据格式的对比与使用</description></item><item>
      <title>hugo</title>
      <link>https://memex.keinmal.top/docs/code/hugo/</link>
      <pubDate>Tue, 02 Dec 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://memex.keinmal.top/docs/code/hugo/</guid>
      <description>自制hugo主题后做一些记录</description></item><item>
      <title>一些sh脚本</title>
      <link>https://memex.keinmal.top/docs/code/shell-scripts-example/</link>
      <pubDate>Sat, 25 Oct 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://memex.keinmal.top/docs/code/shell-scripts-example/</guid>
      <description>&lt;h1 id=&#34;scripts-example&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#scripts-example&#34;&gt;#&lt;/a&gt;scripts example&lt;/h1&gt;
&lt;details open&gt;
    &lt;summary&gt;TEXT&lt;/summary&gt;&lt;pre
        class=&#34;codeblock&#34;
      &gt;&lt;code class=&#34;language-&#34; data-lang=&#34;&#34;&gt;find . -name &amp;#34;*.md&amp;#34; -type f -exec grep -lE &amp;#34;Finished&amp;#34; {} &amp;#43; | while read file; do
  if ! grep -q &amp;#34;2025-05-31&amp;#34; &amp;#34;$file&amp;#34;; then
    number=$(awk &amp;#39;/^pages: [0-9]&amp;#43;/ {print $2}&amp;#39; &amp;#34;$file&amp;#34;)
    if [ -n &amp;#34;$number&amp;#34; ]; then
      sed -i &amp;#34;/Finished/i\\- 2025-05-31: $number&amp;#34; &amp;#34;$file&amp;#34;
      echo &amp;#34;已处理: $file - 插入: - 2025-05-31: $number&amp;#34;
    else
      echo &amp;#34;跳过: $file (未找到pages数字或有效日期)&amp;#34;
    fi
  else
    echo &amp;#34;排除: $file (包含 2025-05-31)&amp;#34;
  fi
done&lt;/code&gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;details open&gt;
    &lt;summary&gt;TEXT&lt;/summary&gt;&lt;pre
        class=&#34;codeblock&#34;
      &gt;&lt;code class=&#34;language-&#34; data-lang=&#34;&#34;&gt;# 创建备份和日志
backup_dir=&amp;#34;backup_$(date &amp;#43;%Y%m%d)&amp;#34;
mkdir -p &amp;#34;$backup_dir&amp;#34;
log_file=&amp;#34;replace_log.txt&amp;#34;

echo &amp;#34;开始替换操作 $(date)&amp;#34; &amp;gt; &amp;#34;$log_file&amp;#34;

find . -name &amp;#34;*.md&amp;#34; -type f | while read file; do
    # 检查文件是否包含目标字符串
    if grep -q &amp;#34;- 2025-06-01: Finished&amp;#34; &amp;#34;$file&amp;#34;; then
        # 创建备份
        cp &amp;#34;$file&amp;#34; &amp;#34;$backup_dir/$(basename &amp;#34;$file&amp;#34;)&amp;#34;
        # 执行替换
        sed -i &amp;#39;s/- 2025-06-01: Finished/- 2025-05-31: Finished/g&amp;#39; &amp;#34;$file&amp;#34;
        # 记录日志
        echo &amp;#34;已修改: $file&amp;#34; &amp;gt;&amp;gt; &amp;#34;$log_file&amp;#34;
        # 显示变更
        echo &amp;#34;=== $file 修改内容 ===&amp;#34;
        diff &amp;#34;$backup_dir/$(basename &amp;#34;$file&amp;#34;)&amp;#34; &amp;#34;$file&amp;#34; || true
    else
        echo &amp;#34;无修改: $file&amp;#34; &amp;gt;&amp;gt; &amp;#34;$log_file&amp;#34;
    fi
done

echo &amp;#34;操作完成，备份在 $backup_dir，日志见 $log_file&amp;#34;&lt;/code&gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;details open&gt;
    &lt;summary&gt;TEXT&lt;/summary&gt;&lt;pre
        class=&#34;codeblock&#34;
      &gt;&lt;code class=&#34;language-&#34; data-lang=&#34;&#34;&gt;find . -name &amp;#34;*.md&amp;#34; -type f -exec grep -l &amp;#34;lists: book&amp;#34; {} &amp;#43; | \
while read file; do
    if ! grep -q &amp;#34;Finished&amp;#34; &amp;#34;$file&amp;#34;; then
        # 确保文件末尾有空行（避免追加内容粘连）
        [ -n &amp;#34;$(tail -c 1 &amp;#34;$file&amp;#34;)&amp;#34; ] &amp;amp;&amp;amp; echo &amp;gt;&amp;gt; &amp;#34;$file&amp;#34;
        # 追加内容
        echo &amp;#34;- 2025-06-01: Finished&amp;#34; &amp;gt;&amp;gt; &amp;#34;$file&amp;#34;
        echo &amp;#34;已处理: $file&amp;#34;
    else
        echo &amp;#34;跳过: $file (已包含 Finished)&amp;#34;
    fi
done&lt;/code&gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;details open&gt;
    &lt;summary&gt;TEXT&lt;/summary&gt;&lt;pre
        class=&#34;codeblock&#34;
      &gt;&lt;code class=&#34;language-&#34; data-lang=&#34;&#34;&gt;find . -name &amp;#34;*.md&amp;#34; -type f -exec grep -L &amp;#34;Finished&amp;#34; {} &amp;#43; | while read file; do
    awk &amp;#39;BEGIN {done=0} /^---/ &amp;amp;&amp;amp; !done {print; print &amp;#34;- 2025-06-01: Finished&amp;#34;; done=1; next} 1&amp;#39; &amp;#34;$file&amp;#34; &amp;gt; tmp &amp;amp;&amp;amp; mv tmp &amp;#34;$file&amp;#34;
done&lt;/code&gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;</description></item><item>
      <title>编程语言概览</title>
      <link>https://memex.keinmal.top/docs/code/code-lang_1/</link>
      <pubDate>Sat, 12 Jul 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://memex.keinmal.top/docs/code/code-lang_1/</guid>
      <description>编程语言的类型。主要为AI生成。</description></item><item>
      <title>编程语言概览</title>
      <link>https://memex.keinmal.top/docs/code/code-lang/</link>
      <pubDate>Sat, 12 Jul 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://memex.keinmal.top/docs/code/code-lang/</guid>
      <description>编程语言的类型。主要为AI生成。</description></item><item>
      <title>lua</title>
      <link>https://memex.keinmal.top/docs/code/lua/</link>
      <pubDate>Mon, 07 Jul 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://memex.keinmal.top/docs/code/lua/</guid>
      <description>&lt;h1 id=&#34;lua&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#lua&#34;&gt;#&lt;/a&gt;lua&lt;/h1&gt;
&lt;h2 id=&#34;variable&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#variable&#34;&gt;##&lt;/a&gt;variable&lt;/h2&gt;
&lt;details open&gt;
    &lt;summary&gt;lua&lt;/summary&gt;&lt;pre
        class=&#34;chroma codeblock&#34;
      &gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;
          &gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;num &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;42&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- Numbers can be integer or floating point.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;walternate&amp;#39;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- Immutable strings like Python.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;t &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;double-quotes are also fine&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;u &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;[[ Double brackets
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;       start and end
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;       multi-line strings.]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;t &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- Undefines t; Lua has garbage collection.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code
        &gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;h3 id=&#34;string&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#string&#34;&gt;###&lt;/a&gt;string&lt;/h3&gt;
&lt;h2 id=&#34;control&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#control&#34;&gt;##&lt;/a&gt;control&lt;/h2&gt;
&lt;details open&gt;
    &lt;summary&gt;lua&lt;/summary&gt;&lt;pre
        class=&#34;chroma codeblock&#34;
      &gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;
          &gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; num &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;over 40&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;elseif&lt;/span&gt; s &lt;span style=&#34;color:#f92672&#34;&gt;~=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;walternate&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- ~= is not equals.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- Equality check is == like Python; ok for strs.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  io.write(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;not over 40&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;)  &lt;span style=&#34;color:#75715e&#34;&gt;-- Defaults to stdout.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- Variables are global by default.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  thisIsGlobal &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- Camel case is common.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- How to make a variable local:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;local&lt;/span&gt; line &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; io.read()  &lt;span style=&#34;color:#75715e&#34;&gt;-- Reads next stdin line.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- String concatenation uses the .. operator:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Winter is coming, &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;..&lt;/span&gt; line)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Undefined variables return nil.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- This is not an error:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;foo &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; anUnknownVariable  &lt;span style=&#34;color:#75715e&#34;&gt;-- Now foo = nil.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;aBoolValue &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Only nil and false are falsy; 0 and &amp;#39;&amp;#39; are true!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; aBoolValue &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt; print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;it was false&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- &amp;#39;or&amp;#39; and &amp;#39;and&amp;#39; are short-circuited.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- This is similar to the a?b:c operator in C/js:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ans &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; aBoolValue &lt;span style=&#34;color:#f92672&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;yes&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;or&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;no&amp;#39;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;--&amp;gt; &amp;#39;no&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;karlSum &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- The range includes both ends.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  karlSum &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; karlSum &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; i
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Use &amp;#34;100, 1, -1&amp;#34; as the range to count down:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fredSum &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; j &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; fredSum &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; fredSum &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; j &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- In general, the range is begin, end[, step].&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Another loop construct:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;repeat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;the way of the future&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  num &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; num &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;until&lt;/span&gt; num &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code
        &gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;details open&gt;
    &lt;summary&gt;lua&lt;/summary&gt;&lt;pre
        class=&#34;chroma codeblock&#34;
      &gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;
          &gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; k, v &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; pairs(t) &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(k, v)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;array &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Google&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Runoob&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; key,value &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; ipairs(array)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   print(key, value)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code
        &gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;h2 id=&#34;function&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#function&#34;&gt;##&lt;/a&gt;function&lt;/h2&gt;
&lt;details open&gt;
    &lt;summary&gt;lua&lt;/summary&gt;&lt;pre
        class=&#34;chroma codeblock&#34;
      &gt;&lt;code class=&#34;language-lua&#34; data-lang=&#34;lua&#34;
          &gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fib&lt;/span&gt;(n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; n &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; fib(n &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; fib(n &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Closures and anonymous functions are ok:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;adder&lt;/span&gt;(x)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- The returned function is created when adder is&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- called, and remembers the value of x:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (y) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; y &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;a1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; adder(&lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;a2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; adder(&lt;span style=&#34;color:#ae81ff&#34;&gt;36&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(a1(&lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;))  &lt;span style=&#34;color:#75715e&#34;&gt;--&amp;gt; 25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(a2(&lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;))  &lt;span style=&#34;color:#75715e&#34;&gt;--&amp;gt; 100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Returns, func calls, and assignments all work&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- with lists that may be mismatched in length.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Unmatched receivers are nil;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- unmatched senders are discarded.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;x, y, z &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Now x = 1, y = 2, z = 3, and 4 is thrown away.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;bar&lt;/span&gt;(a, b, c)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  print(a, b, c)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;23&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;42&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;x, y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; bar(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;zaphod&amp;#39;&lt;/span&gt;)  &lt;span style=&#34;color:#75715e&#34;&gt;--&amp;gt; prints &amp;#34;zaphod  nil nil&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Now x = 4, y = 8, values 15...42 are discarded.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Functions are first-class, may be local/global.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- These are the same:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;(x) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; x &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;f &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (x) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; x &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- And so are these:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;local&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;g&lt;/span&gt;(x) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; math.sin(x) &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;local&lt;/span&gt; g; g  &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (x) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; math.sin(x) &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- the &amp;#39;local g&amp;#39; decl makes g-self-references ok.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Calls with one string param don&amp;#39;t need parens:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- Works fine.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code
        &gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;p&gt;多变量参数&lt;/p&gt;</description></item><item>
      <title>caldav协议</title>
      <link>https://memex.keinmal.top/docs/code/caldav/</link>
      <pubDate>Mon, 30 Jun 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://memex.keinmal.top/docs/code/caldav/</guid>
      <description>caldav是一个基于webdav的日历协议，可以用来同步日历数据。它是一个开放的标准，允许不同的日历应用程序和服务之间进行互操作。</description></item><item>
      <title>pake打包web应用</title>
      <link>https://memex.keinmal.top/docs/code/pake/</link>
      <pubDate>Sun, 08 Jun 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://memex.keinmal.top/docs/code/pake/</guid>
      <description>&lt;h1 id=&#34;pake打包web应用&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#pake%e6%89%93%e5%8c%85web%e5%ba%94%e7%94%a8&#34;&gt;#&lt;/a&gt;pake打包web应用&lt;/h1&gt;
&lt;p&gt;
可以将web转化为桌面应用，比&lt;code&gt;electron&lt;/code&gt;更轻量。&lt;/p&gt;
&lt;h2 id=&#34;安装pake&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#%e5%ae%89%e8%a3%85pake&#34;&gt;##&lt;/a&gt;安装pake&lt;/h2&gt;
&lt;p&gt;用户级安装：&lt;/p&gt;
&lt;details open&gt;
    &lt;summary&gt;TEXT&lt;/summary&gt;&lt;pre
        class=&#34;codeblock&#34;
      &gt;&lt;code class=&#34;language-&#34; data-lang=&#34;&#34;&gt;npm -g install pake-cli&lt;/code&gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;p&gt;需要&lt;code&gt;rust&lt;/code&gt;等工具链&lt;/p&gt;
&lt;h2 id=&#34;打包web应用&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#%e6%89%93%e5%8c%85web%e5%ba%94%e7%94%a8&#34;&gt;##&lt;/a&gt;打包web应用&lt;/h2&gt;
&lt;p&gt;例如&lt;/p&gt;
&lt;details open&gt;
    &lt;summary&gt;TEXT&lt;/summary&gt;&lt;pre
        class=&#34;codeblock&#34;
      &gt;&lt;code class=&#34;language-&#34; data-lang=&#34;&#34;&gt;pake chat.deepseek.com --name deepseek --width 1080 --height 1920 --show-system-tray --icon 512x512-RGBA.png&lt;/code&gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;p&gt;要注意的是分辨率设置，以及icon格式为512x512的png，似乎必须是&lt;code&gt;RGBA&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;会得到&lt;code&gt;deepseek.deb&lt;/code&gt;，内部结构为&lt;/p&gt;</description></item><item>
      <title>grep</title>
      <link>https://memex.keinmal.top/docs/code/grep/</link>
      <pubDate>Mon, 05 May 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://memex.keinmal.top/docs/code/grep/</guid>
      <description>&lt;h2 id=&#34;grep&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#grep&#34;&gt;##&lt;/a&gt;grep&lt;/h2&gt;
&lt;p&gt;ref: 
&lt;/p&gt;
&lt;h2 id=&#34;count-occurrence--c&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#count-occurrence--c&#34;&gt;##&lt;/a&gt;Count Occurrence: &lt;code&gt;-c&lt;/code&gt;&lt;/h2&gt;
&lt;details open&gt;
    &lt;summary&gt;TEXT&lt;/summary&gt;&lt;pre
        class=&#34;codeblock&#34;
      &gt;&lt;code class=&#34;language-&#34; data-lang=&#34;&#34;&gt;$ cat example.txt | grep -c good
2&lt;/code&gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;h2 id=&#34;get-context--c&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#get-context--c&#34;&gt;##&lt;/a&gt;Get Context: &lt;code&gt;-C&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Set &lt;code&gt;--context=0&lt;/code&gt; to print that line alone&lt;/p&gt;
&lt;details open&gt;
    &lt;summary&gt;TEXT&lt;/summary&gt;&lt;pre
        class=&#34;codeblock&#34;
      &gt;&lt;code class=&#34;language-&#34; data-lang=&#34;&#34;&gt;$ cat example.txt | grep --context=0 &amp;#34;good luck&amp;#34;
good luck&lt;/code&gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;p&gt;Set &lt;code&gt;--context=1&lt;/code&gt; to print 1 line below and 1 line above&lt;/p&gt;
&lt;details open&gt;
    &lt;summary&gt;TEXT&lt;/summary&gt;&lt;pre
        class=&#34;codeblock&#34;
      &gt;&lt;code class=&#34;language-&#34; data-lang=&#34;&#34;&gt;$ cat example.txt | grep --context=1 &amp;#34;good luck&amp;#34;
hello world
good luck
good day&lt;/code&gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;p&gt;or use &lt;code&gt;-C 1&lt;/code&gt;&lt;/p&gt;</description></item><item>
      <title>sed cheatsheet</title>
      <link>https://memex.keinmal.top/docs/code/sed/</link>
      <pubDate>Thu, 01 May 2025 00:00:00 +0000</pubDate><author>wyz2016zxc@outlook.com(Hiraeth)</author><guid>https://memex.keinmal.top/docs/code/sed/</guid>
      <description>&lt;h1 id=&#34;sed&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#sed&#34;&gt;#&lt;/a&gt;sed&lt;/h1&gt;
&lt;h2 id=&#34;tldr&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#tldr&#34;&gt;##&lt;/a&gt;tldr&lt;/h2&gt;
&lt;details open&gt;
    &lt;summary&gt;sh&lt;/summary&gt;&lt;pre
        class=&#34;chroma codeblock&#34;
      &gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;
          &gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[range]s/[patern]/[replacement]/[options]&amp;#34;&lt;/span&gt; file_*
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sed -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2,5s|[patern]|[replacement]|[options]&amp;#34;&lt;/span&gt; file_*&lt;/span&gt;&lt;/span&gt;&lt;/code
        &gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;h3 id=&#34;search-for-text&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#search-for-text&#34;&gt;###&lt;/a&gt;Search for text&lt;/h3&gt;
&lt;p&gt;Search for a string and only print the lines that were matched&lt;/p&gt;
&lt;details open&gt;
    &lt;summary&gt;sh&lt;/summary&gt;&lt;pre
        class=&#34;chroma codeblock&#34;
      &gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;
          &gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sed -n &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/hello/p&amp;#39;&lt;/span&gt; file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code
        &gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;p&gt;Case insensitive search&lt;/p&gt;
&lt;details open&gt;
    &lt;summary&gt;sh&lt;/summary&gt;&lt;pre
        class=&#34;chroma codeblock&#34;
      &gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;
          &gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sed -n &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/hello/Ip&amp;#39;&lt;/span&gt; file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code
        &gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;h3 id=&#34;sed-usage&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#sed-usage&#34;&gt;###&lt;/a&gt;Sed Usage&lt;/h3&gt;
&lt;p&gt;Syntax&lt;/p&gt;
&lt;details open&gt;
    &lt;summary&gt;shell&lt;/summary&gt;&lt;pre
        class=&#34;chroma codeblock&#34;
      &gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;
          &gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ sed &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;options&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; command &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;input-file&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code
        &gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;p&gt;With pipeline&lt;/p&gt;
&lt;details open&gt;
    &lt;summary&gt;sh&lt;/summary&gt;&lt;pre
        class=&#34;chroma codeblock&#34;
      &gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;
          &gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cat report.txt | sed &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/Nick/John/g&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code
        &gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;details open&gt;
    &lt;summary&gt;sh&lt;/summary&gt;&lt;pre
        class=&#34;chroma codeblock&#34;
      &gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;
          &gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;123abc&amp;#39;&lt;/span&gt; | sed &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/[0-9]+//g&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code
        &gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;h3 id=&#34;option-examples&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#option-examples&#34;&gt;###&lt;/a&gt;Option Examples&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Option&lt;/th&gt;
					&lt;th&gt;Example&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-i&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;sed -ibak &amp;rsquo;s/On/Off/&amp;rsquo; php.ini&lt;/td&gt;
					&lt;td&gt;Backup and modify input file directly&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-E&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;sed -E &amp;rsquo;s/[0-9]+//g&amp;rsquo; input-file&lt;/td&gt;
					&lt;td&gt;Use extended regular expressions&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;sed -n &amp;lsquo;3 p&amp;rsquo; config.conf&lt;/td&gt;
					&lt;td&gt;Suppress default pattern space printing&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-f&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;sed -f script.sed config.conf&lt;/td&gt;
					&lt;td&gt;Execute sed script file&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-e&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;sed -e &amp;lsquo;command1&amp;rsquo; -e &amp;lsquo;command2&amp;rsquo; input-file&lt;/td&gt;
					&lt;td&gt;Execute multiple sed commands&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;multiple-commands&#34;&gt;
  &lt;a class=&#34;anchor inpage&#34; href=&#34;#multiple-commands&#34;&gt;###&lt;/a&gt;Multiple commands&lt;/h3&gt;
&lt;details open&gt;
    &lt;summary&gt;sh&lt;/summary&gt;&lt;pre
        class=&#34;chroma codeblock&#34;
      &gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;
          &gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt; | sed -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/h/H/g&amp;#39;&lt;/span&gt; -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s/w/W/g&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Hello World&lt;/span&gt;&lt;/span&gt;&lt;/code
        &gt;&lt;button type=&#34;button&#34; class=&#34;copybtn&#34;&gt;copy&lt;/button&gt;&lt;/pre&gt;&lt;/details&gt;&lt;p&gt;Use &lt;code&gt;-e&lt;/code&gt; to execute multiple sed commands&lt;/p&gt;</description></item></channel>
</rss>
